Ios 将集合与内部数组进行比较

Ios 将集合与内部数组进行比较,ios,objective-c,swift,cocoa-touch,foundation,Ios,Objective C,Swift,Cocoa Touch,Foundation,在Objective-C中,您可以轻松地将包含NSArray对象的NSSet对象初始化为元素。借助isEqual:方法,您可以轻松比较那些NSSet对象 现在,在Swift中,它的强类型要多得多,我们不能再这样做了。以下声明将收到“Type[Int]不符合协议哈希表”错误 var集:集 我现在试图比较两组包含一组整数的数组的相等性,我想利用Swift中集合和数组的“isEqual:”思想,我应该怎么做?这里的问题是:为什么我不能用标准库来做呢? Set需要Hashable项,这些项也必须是eq

在Objective-C中,您可以轻松地将包含
NSArray
对象的
NSSet
对象初始化为元素。借助isEqual:方法,您可以轻松比较那些
NSSet
对象

现在,在Swift中,它的强类型要多得多,我们不能再这样做了。以下声明将收到“Type[Int]不符合协议哈希表”错误

var集:集

我现在试图比较两组包含一组整数的数组的相等性,我想利用Swift中集合和数组的“isEqual:”思想,我应该怎么做?

这里的问题是:为什么我不能用标准库来做呢?
Set
需要
Hashable
项,这些项也必须是
equalable
。这意味着执行
设置
需要检查任何
数组
是否与其他数组相等。但是,如果
T
不可
equalable
,您如何比较它们?无法(仍然?)声明条件扩展导致以下情况:(


我认为您最好的选择(不要在标准库上过多地使用扩展)是在Swift中也使用
NSSet
/
NSArray
,或者至少定义这两部分中的一部分(
Set
Array
)作为一个包装器。

我想,只要做一个数组扩展并使其可散列,但由于这需要一个
var hashValue
,很遗憾,它不能在另一个模块中定义。不正确,
hashValue
也可以是一个计算属性,可以在扩展中添加而不会出现问题。@DavideDeFranceschi是的,但
hashValue
需要声明为
public
,不能添加到扩展中。
扩展NSArray:equalable{}public func==(lhs:NSArray,rhs:NSArray)->Bool{return lhs.isequaltary(rhs as[AnyObject])扩展NSArray:Hashable{var Hashable:Int{return 1}让fooSet:Set=[NSArray(数组:[1,2])]fooSet.dynamicType
这是在我的游乐场上编译的(对不起,不能在注释中格式化长代码?)
var set: Set<[Int]>