var setE: Set = [1,2,3,4] setE.insert(5) setE.insert(5) setE.insert(5) print(setE) //[4,5,1,2,3]
和前面所说的一样,上面代码每次执行时输出的顺序可能不同,因为集合元素无序。
集合比较
集合间能进行比较。显然,可以比较两个集合是否相等:
let setA: = [“a”, “b”, “c”] let setB: = [“a”, “b”, “c”] if setA == setB { print(“the sets are equal”) }
这种情况下,集合是相等的。
比较两个集合的大小是没有明确的定义,但可以检查一个集合是否是另一个集合的子集:
let intSetA: Set = [1,2,3,4,5,6,7,8,9,0] let intSetB: Set = [1,2,3] intSetB.isSubset(of: intSetA) //true
也可以检查集合是否是另一个集合的真子集。这种情况就是该集合是另一个集合的子集但不想等。
let intSetA: Set = [1,2,3,4,5,6,7,8,9,0] let intSetB: Set = [1,2,3,4,5,6,7,8,9,0] let intSetC: Set = [3,4,5] intSetB.isSubset(of: intSetA) //true intSetB.isStrictSubset(of: intSetA) //false intSetC.isSubset(of: intSetA) // true intSetC.isStrictSubset(of: intSetA) //true
与之相对的概念就是超集:
let intSetA: Set = [1,2,3,4,5,6,7,8,9,0] let intSetC: Set = [3,4,5] intSetA.isSuperset(of: intSetC) //true intSetA.isStrictSuperset(of: intSetC) //true
如果两个集合没有相同的元素,那么就说这两个集合不相交
let intSetA: Set = [1,2,3,4,5,6,7,8,9,0] let intSetC: Set = [3,4,5] let intSetD: Set = [13,14,15] intSetA.isDisjoint(with: intSetC) //false intSetA.isDisjoint(with: intSetD) //true
集合结合
你可以将两个集合合并成为一个新集合,新的集合中包含两个集合中所有的元素:
let stringSetA: Set = ["a","b","c"] let stringSetB: Set = ["c","d","e"]
let unionSetAB = stringSetA.union(stringSetB) print(unionSetAB) //["d", "b", "c", "a", "e"]
另一方面,交集就是仅包含两个集合中共同的元素:
let stringSetA: Set = ["a","b","c"] let stringSetB: Set = ["c","d","e"] let intersectionAB = stringSetA.intersection(stringSetB) print(intersectionAB) //[“c”]