在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> = ["阳君", "937447974", "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 testAddAndRemove() {
var set:Set<String> = ["阳君", "937447974", "swift"]
set.insert("IOS") // 增加
var str = set.remove("IOS") // 删除指定元素, 并返回删除的元素
str = set.removeAtIndex(set.indexOf("阳君")!) // 根据位置删除
str = set.removeFirst() // 删除首个
set.removeAll() // 删除所有
print("str:\(str)")
}
结合和重组
// MARK: 结合和重组
private func testCombiningAndRecombining() {
let a:Set<String> = ["阳君", "937447974", "swift"]
let b:Set<String> = ["IOS", "937447974", "swift"]
let c:Set<String> = ["阳君", "937447974", "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> = ["阳君", "937447974", "swift", "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总结 |