有没有标准的库调用可以用来在两个数组上执行set操作,或者自己实现这样的逻辑(理想的情况是功能上尽可能有效)?

推荐答案

是的,Swift 有Set级.

let array1 = ["a", "b", "c"]
let array2 = ["a", "b", "d"]

let set1:Set<String> = Set(array1)
let set2:Set<String> = Set(array2)

Swift 3.0+可以对集合执行以下操作:

firstSet.union(secondSet)// Union of two sets
firstSet.intersection(secondSet)// Intersection of two sets
firstSet.symmetricDifference(secondSet)// exclusiveOr

Swift 2.0可以根据数组参数进行计算:

set1.union(array2)       // {"a", "b", "c", "d"} 
set1.intersect(array2)   // {"a", "b"}
set1.subtract(array2)    // {"c"}
set1.exclusiveOr(array2) // {"c", "d"}

Swift 1.2+可以在集合中计算:

set1.union(set2)        // {"a", "b", "c", "d"}
set1.intersect(set2)    // {"a", "b"}
set1.subtract(set2)     // {"c"}
set1.exclusiveOr(set2)  // {"c", "d"}

如果使用自定义 struct ,则需要实现Hashable.

感谢迈克尔·斯特恩对Swift 2.0更新的 comments .

感谢Amjad Husseini在 comments 中提供的可哈希信息.

Swift相关问答推荐

如何将EnvironmentObject从UIKit视图控制器传递到SwiftUI视图

如何使用Swift宏向 struct 体及其init函数添加新成员?

是否可以循环遍历SWIFT子类并访问它们的静态变量S?

将NavigationSplitView更改为NavigationStack

是否可以限制 ExpressibleByIntegerLiteral struct 的初始值?

macOS SwiftUI: 如何触发删除一个项目?

SwiftUI 交易:根据外部状态制作一个动画或静止的按钮

从 Obj-C 函数返回 swift 类的不兼容指针类型

Swift-SceneKit-无法从art.scnassets加载.scn文件

如何在一个视图控制器中创建具有相同行为的多个集合视图?

UIButton 配置不更新按钮标题

签署GoogleSignIn-GoogleSignIn需要开发团队

如何更改 Picker 的边框 colored颜色

如何在 Swift 中将 XPC 自定义类列入白名单?

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

调整文本的字体大小以适应 UIButton

快速在 LLDB 中使用 po

由于编译器中的内部保护级别,无法访问框架 init 中的公共 struct

Switch 语句中的字符串:String不符合协议IntervalType

枚举大小写的原始值必须是文字