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