在 Objective-C 中,您可以轻松地初始化包含 NSArray
对象作为元素的 NSSet
对象。由于 isEqual: 方法,您可以轻松比较那些 NSSet
对象。
现在在强类型化得多的 Swift 中,我们不能再这样做了。以下声明将收到“Type [Int] 不符合协议(protocol) Hashable”错误。
var set: Set<[Int]>
我现在正在尝试比较包含一堆 Int 数字的两组数组的相等性,我想利用 Swift 中的 Set 和 Array 的“isEqual:”思想,我应该怎么做?
最佳答案
这里的问题是思考:为什么我不能使用标准库来做到这一点?
Set
需要 Hashable
项目,必须是 Equatable
以及。这意味着做 Set<Array<T>>
需要任何 Array
检查是否与他人平等。但是如果T
不是 Equatable
,你如何比较它们?无法(仍然?)声明条件扩展会导致 :(
我认为你最好的选择(不要过多地混淆标准库的扩展)是使用 NSSet
/NSArray
在 Swift 中也是如此,或者至少将两个部分( Set
和 Array
)之一定义为包装器。
关于ios - 将集合与内部数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30150155/