iOS swift 3 : Comparing One all elements of Array in another array

标签 ios arrays swift

我有这样的结构模型

struct ModelA {
    let text: String
    let id: Int
}

extension ModelA: Equatable {}

func ==(lhs: ModelA, rhs: ModelA) -> Bool {
    let areEqual = lhs.id == rhs.id
    return areEqual
}

我已经创建了这个模型的数组

let a1:[ModelA] = [ModelA(text: "10", id: 11), ModelA(text: "11", id: 12)]
let a2:[ModelA] = [ModelA(text: "11", id: 12)]

具有比较功能

func isEqualArray(first array1: [Any], second array2: [Any]) -> Bool {
     let set1 = NSSet(array: array1)
     let set2 = NSSet(array: array2)
     return set1.isSubset(of: set2 as! Set<AnyHashable>)
}

所以当我尝试交叉检查时

 let flag = isEqualArray(first: a1, second: a2)
 print("### \(flag)")

函数返回时崩溃

enter image description here

我做错了什么?

最佳答案

您的结构需要同时符合 equatablehashable 才能在 Set 中使用。看起来你只关心 id,所以一个简单的实现是:

struct ModelA {
    let text: String
    let id: Int
}

extension ModelA: Equatable {
    static func ==(lhs: ModelA, rhs: ModelA) -> Bool {
        return lhs.id == rhs.id
    }
}

extension ModelA: Hashable {
    var hashValue: Int {
        return id
    }
}

现在,您可以在 isEqualArray 函数中使用 Swift 集;您还需要考虑哪个集合较小,因为您使用的是 isSubSet(of:):

func isEqualArray(first array1: [AnyHashable], second array2: [AnyHashable]) -> Bool {

    let set1: Set<AnyHashable>
    let set2: Set<AnyHashable>

    if array1.count > array2.count {
        set1 = Set(array1)
        set2 = Set(array2)
    } else {
        set1 = Set(array2)
        set2 = Set(array1)
    }
    return set2.isSubset(of: set1)
}

您的代码实际上确定一个数组是否是另一个数组的子集,而不是数组是否相等,所以我不确定这是否是您想要的。

关于iOS swift 3 : Comparing One all elements of Array in another array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45474477/

相关文章:

ios - 如何在触摸时旋转图像并将图像拖到另一个图像上

ios - 更改键盘返回键标签文本

php - 在 PHP 中计算数组的中位数

swift - iPhone语言设置为中文或日文时,WatchKit Extension连接的outlet在运行时为nil

ios - 使用深度缓冲区和抗锯齿技术时通过 glreadpixel() 读取数据时出现问题

ios - 是否有将属性字符串与本地化结合使用的方法?

python - 请指出我在此数据结构实现中的错误

javascript - Javascript 中如何求交间隔?

ios - 通过 MagicalRecord 保存 NSManagedObject 不起作用

ios - 如何使用 Realm 以正确的方式对这个 json 进行建模?