集合型別 Set
Published in
Nov 10, 2022
Set: An unordered collection of unique elements.
說到集合型別,常用到的 Array陣列、Dictionary字典,肯定不陌生。
不過,當遇到兩組陣列,需要相互取出 交集/不交集 元素,可能會用 filter迴圈來回跑個好幾趟,當陣列資料一大可能就…
這時就可以搬出 Set 來用用了~
Set:
維護一組不重複的資料,資料不依序儲存。
Let’s Code:
* Set 為 Generic 集合資料,需將型別定義在 <> 內。
let oldArray: [String] = ["A", "B", "C", "D", "E"]
let newArray: [String] = ["C", "D", "E", "F", "G"]↓↓↓ Array 轉為 Set ↓↓↓let oldSet: Set<String> = Set(oldArray)
let newSet: Set<String> = Set(newArray)print(oldArray) //["A", "B", "C", "D", "E"]
print(oldSet) //["E", "C", "A", "D", "B"]
✦ 方法:
1. 回傳元素:
union()
傳回兩組 Set 合併的元素。intersect()
傳回兩組 Set 交集的元素。subtracting()
傳回oldSet
內不含newSet
的元素。symmetricDifference()
傳回兩組 Set 不交集的元素。
oldSet.union(newArray) //["F", "E", "C", "B", "A", "G", "D"]
oldSet.intersection(newArray) //["C", "D", "E"]
oldSet.subtracting(newArray) //["A", "B"]
oldSet.symmetricDifference(newArray) //["F", "A", "B", "G"]
2. 回傳 Bool:
isSubset (of:)
回傳是否oldSet
的所有元素包含在newSet
內isSuperset(of:)
回傳是否OldSet
包含newSet
的所有元素isStrictSubset(of:)
/isStrictSuperset(of:)
回傳是否oldSet
包含newSet
,但並不相等isDisjoint(with:)
回傳是否oldSet
不含newSet
元素。
oldSet == newSet
oldSet.isSubset(of: newArray)
oldSet.isSubset(of: newArray)
oldSet.isStrictSubset(of: newArray)
oldSet.isDisjoint(with: newArray)