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

标签 ios objective-c swift cocoa-touch foundation

在 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 中也是如此,或者至少将两个部分( SetArray )之一定义为包装器。

关于ios - 将集合与内部数组进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30150155/

相关文章:

ios - 是否可以通过编程方式关闭 Touch ID LAContext 对话框?

iphone - 如何使 subview 显示在键盘顶部?

ios - 上传到AWS服务器上传失败?

objective-c - [pool release] 和 [pool drain] 有什么区别?

ios - NSArray 不匹配 Swift 数组元素类型

ios - 滚动到 TableView 的最后一个元素需要太多时间

ios - 确保 AM/PM(期间)不会出现在 NSDateFormat stringFromDate 中

ios - 在 Mac OS X 和 iOS 上查找本地 IP 地址的接口(interface)/路由?

swift - 如何在 Xcode 中向 Google Maps API 添加叠加层

swift - 如何在 Swift 中使用 deltaTime 正确计算 1 秒