在Swift中,Set是管理无序集合的对象。当你不关心集合中元素的顺序,只关心每个元素在整个集合中是唯一的时候,你可以使用Set。Set的内部结构图如下所示:
初始化
- // MARK: 初始化
- private func testInit() {
- // 空Set
- var set = Set<String>()
- set = []
- // 通过参数创建
- set = Set(["阳君","937447974"])
- set = Set(arrayLiteral: "阳君","937447974")
- let set2:Set<String> = ["阳君","937447974"]
- print("\(set2)")
- // 通过Set创建
- set = Set(set)
- print("\(set)")
- }
相关属性
- // MARK: 相关属性
- private func testProperties() {
- let set:Set<String> = ["阳君","937447974","swift"]
- print("count:\(set.count)") // 有多少个元素
- print("first:\(set.first)") // 顶部元素
- print("isEmpty:\(set.isEmpty)") // 是否为空
- print("hashValue:\(set.hashValue)") // hash值
- // 首位和末位
- var index = set.startIndex
- index = set.endIndex
- print("index:\(index)")
- }
查找元素
- // MARK: 查找元素
- private func testFindingObjects() {
- let set:Set<String> = ["阳君","swift"]
- print("contains:\(set.contains("阳君"))") // 是否存在这个元素
- // 查找位置
- var index = set.indexOf("阳君")
- index = set.indexOf { (str) -> Bool in
- return "阳君" == str
- }
- let str = set[index!] // 根据位置获取元素
- print("str:\(str)")
- // 遍历输出
- // 无序输出
- for item in set {
- print("item:\(item)")
- }
- // 有序输出
- for item in set.sort() {
- print("item:\(item)")
- }
- }
增加和删除
结合和重组
- // MARK: 结合和重组
- private func testCombiningAndRecombining() {
- let a:Set<String> = ["阳君","swift"]
- let b:Set<String> = ["IOS","swift"]
- let c:Set<String> = ["阳君","swift","IOS"]
- print("isEqual:\(a == b)") // 是否相等
- print("isSubsetOf:\(a.isSubsetOf(c))") // a是否是c的子集
- print("isSupersetOf:\(c.isSupersetOf(a))") // a是否是c的子集
- var set = a.intersect(b) // a交c,返回新set;["937447974","swift"]
- set = a.union(b) // a并b;["阳君","937447974","swift","IOS"]
- set = a.subtract(b) // a差b,即a-a交b;["阳君"]
- set = a.exclusiveOr(b) // a并b-a交b;["阳君","IOS"]
- // 不返回结果集,直接修改前set
- set.intersectInPlace(b) // set交b,结果在set中
- set.unionInPlace(b) // a并b
- set.subtractInPlace(b) // a差b,即a-a交b
- set.exclusiveOrInPlace(b) // a并b-a交b
- }
排序
- // MARK: 排序
- private func testSort() {
- let set:Set<String> = ["阳君","IOS","837447974",]
- var array = set.sort() // 排序,升序
- array = set.sort { (str1,str2) -> Bool in
- return str1 < str2
- }
- // 简写
- array = set.sort({ str1,str2 in str1 < str2 })
- array = set.sort({$0 > $1})
- array = set.sort(>)
- print("\(array)")
- }
其他
参考资料
Set Structure Reference
The Swift Programming Language (Swift 2.1)
NSSet Class Reference
文档修改记录
时间 | 描述 |
---|---|
2015-10-26 | 根据Swift2.1 Set的API总结 |