iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0

今天要來講集合類型裡面的 Set(組),他特別得地方就是他沒有定義的順序。如果你要的東西順序不重要,或者需要東西不重複僅出現一次的話,就可以使用它。

集合類型的 Hash值

先來介紹一下他裡面一個有點像 ID 的東西,hashable 只要是要存在集合類型的都會有一個hash值,而他會是一個Int的值,可以使用 .hashValue 來顯示你的hash值

在更詳細的可以去找一下他的定義。

設置類型語法

Set就是他的寫法,他沒有其他的特別縮寫方式。

實例化一個空組

var letters = Set<Character>()
    
letters.insert("a")
// 新增一個東西進入 letters type為Character    
letters = []
// 現在是一個空Set,但type 還是 Character

使用數組文字來創建

也可以使用數組文字來初始化一個Set,或是將多個值寫成一個 Set

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]

訪問跟修改

Set 跟 Array 一樣可以使用,count 、 isEmpty、 insert(:)、 remove(:),來做修改跟檢查。

Set 的操作

Set 有一些操作可以讓你判斷不同的 Set 有沒有東西包含,不包含,部分包含或者不相同。

  • 使用 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).sorted()
// [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]

接下來下圖描述了三個集合-a,b和c-重疊的區域表示集合之間共享的元素。集a是集b的超級集,因為a包含b中的所有元素。相反,因為b中的所有元素也都包含在a中,所以集合b是集合a的子集。集b和集c彼此之間是不相交的,因為它們沒有共同的元素。

  • 使用"等於"運算符(==)確定兩組是否包含所有相同的值。
  • 使用isSubset(of:)方法確定指定集合中是否包含集合的所有值。
  • 使用isSuperset(of:)方法來確定一個集合是否包含指定集合中的所有值。
  • 使用isStrictSubset(of:)或isStrictSuperset(of:)方法確定集合是子集還是超集,但不等於指定的集合。
  • 使用isDisjoint(with:)方法來確定兩個集合是否沒有共同的值。
let houseAnimals: Set =["?", "?"]
let farmAnimals: Set =["?", "?", "?", "?", "?"]
let cityAnimals: Set =["?", "?"]

houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true

今天就先到這,讓我們明天繼續。


上一篇
30天的 iOS 修仙道路 (8)
下一篇
30天的 iOS 修仙道路 (10)
系列文
30天的 iOS 修仙道路 站穩腳步基礎篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言