Set 是將同一類型是將同一類型並且不重複的直沒有順序的儲存在一個合集當中,當元素的順序不是那麼重要時,又或者你想要確保裡面的直不會重複時,我們可以使用 Set 代替 Array。
・以上兩種方法都可以使用!
Set 類型的 Hash Value
為了能讓類型儲存於 Set 之中,他必須是 Hashable 的。意思是類型必須提供計算自己的 Hash Value 的方法。
而 Hash Value 是什麼呢?其實 Hash Value 是 Int 值,而且所有的對比起來都相等,對象也都相同。
例如:a == b,他遵循著 a.hashValue == b.hashValue。
所有 Swift 類型 ( 如:String、Int、、Double 和 Bool )默認都是hashValue的,並且可以用於 Set 或是 Dictionary 的鍵。而沒有關連值的枚舉也同樣默認 hashable。
*你能以自己定義的類型,作為 Set 值的類型或者 Dictionary 的 Key 類型,只要讓他們遵循著 Swift 就可以了。遵循 Hashable 協議的類型必須提供可以被獲取的 Hash Value 的 Int 屬性。透過 Hash Value 屬性返回的值不必在同一個程序中不同執行中都相同,或是不同程序。
因為 Hashable 協議遵循 Equatable,遵循的內容必須同時一個等於運算符號。也就是說必須滿足下列三個條件 ( a、b 和 c 是任意值 ):
**建立一個個初始化的
我們也套用在上一篇:Array 中的新增、修改及刪除的功能,而其他的查詢、修改及遍歷也跟 Array 相同方法,這裡就不詳加展示了。
回顧上一篇 —> Swift 4 Day-03 集合類型—Array
下面的圖展示了 a 及 b 兩個 Set 在各種操作下的結果,以綠色部分指令所包含的區域:
從左至右由上而下分別是:
・intersect 交集
・symmetric difference 對稱差
・union 聯集
・subtracting 差集
下圖有 a、b、c 三個 Set,相互重疊的區域代表共同擁有的值;a 是 b 的父集 ( b 是 a 的子集 )、b 和 c 不相交,所以沒有重疊。
・使用 == 來判斷兩個 Set 是否包含有相同的值
・使用 isSubset 來判斷一個 Set 是否被某個 Set 所包含
・使用 isSuperset 來判斷一個 Set 是否包含某個 Set 的所有值
・使用 isStrictSubset 或 isStrictSuperset 來判斷一個 Set 是否另一個 Set 的子集或超集
・使用 isDisjoint 來判斷兩個 Set 是否擁有完全不同的值