Set的三个特性
- 确定性:给定一个集合,任给一个元素,该元素或者属于或者不属于该集合,两者必居其一。
- 互斥性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次。
- 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的。
Swift里面的 Set
- Swift 的 set类型写作 Set,这里的 Element是Set要存储的类型。不同于数组,集合没有等价的简写。
创建 Set
- 使用初始化器语法来创建一个确定类型的 空 Set
- 使用数组字面量创建 Set
Set类型的哈希值
- 为了能让类型存储在 Set中,它必须是可哈希的 – 就是说类型必须提供计算它自身哈希值的方法。
- 所有 Swift的基础类型(比如:String,Int,Double和Bool)默认都是可哈希的,并且可以用于Set或者Dictionary的键。
- 自动以类型需要实现
hashable
协议
遍历Set
- 可以使用 For - In 遍历
- 因为 Set是无序的,如果要顺序遍历 Set,使用
sorted()
方法。
访问 Set
- 使用
count
来获取Set里的元素个数 - 使用
isEmpty
判断 Set是否为空。
添加元素
insert(_:)
添加一个元素到Setupdate(with:)
如果已经有相等的元素,替换为新元素。如果Set中没有,则插入。
移除元素
filter(_:)
返回一个新的 Set,新Set的元素是原始 Set符合条件的元素。remove(_:)
从Set当中移除一个元素,如果元素是Set成员就移除它,并且返回移除的值,如果合集没有这个成员就返回 nil。removeAll()
移除所有元素。removeFirst()
移除Set的第一个元素,因为Set是无序的,所以第一个元素并不是放入的第一个元素。
基本 Set操作
intersection(_:)
交集。-
symmetricDifference(_:)
对称差集。subtracting(_:)
相对补集。
Set判断方法
isSubset(of:)
判断是否是另一个 Set或者 Sequence的子集isSuperset(of:)
判断是否是另一个Set或者 Sequence的超集isStrictSubset(of:)
和isStrictSuperset(of:)
判断是否是另一个Set的子集或超集,但是又不等于另一个Set。idDisjoint(with:)
判断两个Set是否有公共元素,如果没有返回true,如果有返回false。