集合型別 Set

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)

--

--