用來存儲相同類型并且沒有確定順序的值。當集合元素順序不重要時或者希望確保每個元素只出現一次 時可以使用集合而不是數組。相對于數組,集合不用關心序列,存儲和查找更快捷
1-語法
Swift 中的 Set 類型被寫為 Set<Element> ,這里的 Element 表示 Set 中允許存儲的類型,和數組不同的是,集 合沒有等價的簡化形式。此外,一個 Set 類型不能從數組字面量中被單獨推斷出來,因此 Set 類型必須顯式聲明。下面的例子創建一個稱之為 favoriteGenres 的集合來存儲 String 類型的值:
// favoriteGenres 被構造成含有三個初始值的集合
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
2-集合操作
除了無序和無重復元素,其用法基本和數組一樣,不一樣的有:
?使用 intersection(:) ,交集:方法根據兩個集合中都包含的值創建的一個新的集合。
? 使用 symmetricDifference(:) ,方法根據在一個集合中但不在兩個集合中的值創建一個新的集合。
? 使用 union(:) ,并集:方法根據兩個集合的值創建一個新的集合。
? 使用 subtracting(:) 方法根據不在該集合中的值創建一個新的集合。
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sort()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits. intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits. symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
? 使用“是否相等”運算符( == )來判斷兩個集合是否包含全部相同的值。
? 使用 isSubset(of:) 方法來判斷一個集合中的值是否也被包含在另外一個集合中。
? 使用 isSuperset(of:) 方法來判斷一個集合中包含另一個集合中所有的值。
? 使用 isStrictSubset(of:) 或者 isStrictSuperset(of:) 方法來判斷一個集合是否是另外一個集合的子集合或 者父集合并且兩個集合并不相等。
? 使用 isDisjoint(with:) 方法來判斷兩個集合是否不含有相同的值(是否沒有交集)。
let farmAnimals: Set = ["?", "?", "?", "?", "?"]
let cityAnimals: Set = ["?", "?"]
houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true