1.集合的三特性
- 确定性:给定一个集合,任意给一个元素,该元素或者属于或者不属于该集合,二者必居其一。
- 互斥性:一个集合中的所有元素都是不相同的。
- 无序性:每个元素的地位相同,元素之间是无序的。
2.Set的创建
// 初始化器创建
var letters = Set<Character>()
letters.insert("c")
print(letters) // 输出 ["c"]// 数组字面量来创建set
var course: Set<String> = ["Math", "English"]
course.insert("History")
3.Set的遍历
For-in遍历,由于Set是无序的,如果要顺序遍历Set,需要使用sorted()方法。
var courses: Set<String> = ["Math", "English"]
for course in courses.sorted() {print(course)
}
// 输出 English Math
4.Set常用属性和方法
- 使用count获得Set里元素个数
- 使用isEmpty判断Set是否为空
- insert(_: )添加一个元素到Set
- update(with:) 如果已有相等的元素,替换为新的元素,如果Set中没有,则插入
- filter(_:)返回一个新的Set,新Set的元素是原始Set符合条件的元素
var personSet: Set = [Person(name: "lewis", age 30)]
personSet.update(with: Person(name: "Jonathan", age: 20))
print(personSet.filter{ $0.age > 25 })
// 输出 Person[name: "lewis", age: 30]
- remove(_:)从Set中移除一个元素,如果元素是Set的成员就移除它,并返回移除的值,如果集合没有这个成员就返回nil
- removeAll()移除集合中所有元素
5.Set的基本操作
- intersection(_:)是求两个集合的交集
- union(_:)求两个集合的并集
- symmetricDifference(_:)就两个集合的对称差集
- subtracting(_:)是求两个集合的相对补集
let set: Set<Character> = ["A","B","C"]
let set2: Set<Character> = ["B","E","F","G"]
print(set.intersection(set2))
print(set.union(set2))
print(set.symmetricDifference(set2))
print(set.subtracting(set2))
// 输出如下
// ["B"]
// ["E","F","B","G","A","C"]
// ["E","F","C","A","G"]
// ["A","C"]
6.Set的判断方法
- isSubset(of:)判断是否是另一个Set或者Sequence的子集
- isSuperset(of:)判断是否是另一个Set或者Sequence的超集
- isStrictSubset(of:)和isStrictSuperset(of:)判断是否是另一个Set的子集或超集,但又不等于另个一Set
- isDisjoint(with:)判断两个Set是否有公共元素,如果没有返回true,有则返回false
let smallSet: Set = [1,2,3]
let bigSet: Set = [1,2,3,4]
print(smallSet.isSubset(of: bigSet))
print(bigSet.isSuperset(of: smallSet))
print(bigSet.isStrictSuperset(of: smallSet))
print(smallSet.isDisjoint(with: bigSet))
// 输出 true true true false