参考:
https://developer.apple.com/集合中存储相同类型的不同值, 集合中没有定义的顺序。当项目的顺序不重要时,或者当您需要确保某个项目只显示一次时,可以使用集合而不是数组。set中的值是unique的。
创建一个空set
1 | var letters = Set<Character>() |
创建一个数组文字的集合
1 | var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"] |
访问和修改set
insert
1 | favoriteGenres.insert("Jazz") |
remove
1 | favoriteGenres.remove("Rock") // 返回remove的item, 如果没有相应的item,返回nil |
removeAll
1 | favoriteGenres.removeAll() |
contains
1 | //是否set中包含特定的item |
遍历set
1 | for genre in favoriteGenres { |
set 属性
count
1 | print("I have \(favoriteGenres.count) favorite music genres.") |
isEmpty
1 | if favoriteGenres.isEmpty { |
set 操作
可以高效地完成Set的一些基本操作,比如把两个集合组合到一起,判断两个集合共有元素,或者判断两个集合是否全包含,部分包含或者不相交。
intersection
两个集合的交集(common values)
symmetricDifference
不包含两个集合交集的部分的集合
union
两个集合的并集
subtracting
根据不在该集合中的值创建一个新的集合
1 |
|
集合的关系(成员、相等)
下面的图描述了三个集合-a,b和c,以及通过重叠区域表述集合间共享的元素。集合a是集合b的父集合,因为a包含了b中所有的元素,相反的,集合b是集合a的子集合,因为属于b的元素也被a包含。集合b和集合c彼此不关联,因为它们之间没有共同的元素。
是否相等
通过==
来判断两个集合是否包含完全相同的值。
子集关系
isSubset(of:)
判断是不是某个集合的子集
父集关系
isSuperset(of:)
判断是不是某个集合的父集
真子集
isStrictSubset(of:)
判断是不是一个集合的子集,并且两个集合不相同
真父级
isStrictSuperset(of:)
判断是不是一个集合的父集,并且两个集合不相同
没有交集
isDisjoint(with:)