Swift提供了三種主要的集合類型,有 Array 、 Set 還有 Dictionary,用來作為儲存值的集合。
當你使用 var 去宣告 Array , Set 或是 Dictionary 給變數,那麼這個集合就是可變的,這代表你可以對這個集合進行新增、刪除、修改。但如果你用 let 將集合宣告給一個常數,那麼這個集合的任何大小和內容都無法被修改。
數組以有序的方式來儲存相同類型的值。相同類型的值可以在數組的不同地方多次出現。
你可以使用確定類型通過初始化器語法來創建一個空數組,並用 count 查看數組中的數量。
*切記數組的順序是從 0 開始而不是 1 ,所以數組中的 [0] 為第一個元素。
如果數組是一個變量的話,我們可以利用 append 在數組最後添加相同類型的值。
刪除的話我們可以使用 removeLast 把 array 最後面的值給刪除,也就是剛剛添加的 33。
當然我們也可以為要選擇要插入或刪除的值的序,直接加入或刪除該序的值的位置。使用 insert 方法插入和使用 remove 方法刪除,這兩者都必須輸入要執行的順序位置。
清空數組的方式可以使用 removeAll() 的方式清除,或是將 array 轉成一個空數組。
我們使用 Array(repeating: 數字 , count: 重複次數) 來實行這個方式實行他。
在這個例子中,我想把有 1, 2, 3 的數組 (one2three) 與 4, 5, 6 的數組 (four2six) 合在一起,並且將他們合在一起的數組放到 (one2six) 的數組中。
當然你也可以使用字串來創建數組,並且用 count 來查看數組中的數量。
我們也可以使用 isEmpty 來快速了解數組內是否有值。
字串類型的數組也可以用上述的方式進行新增、刪除,我們也可以使用 ( += ) 符號在數組的最後加上一個或是多個相同類型的元素。
我們可以藉由 shoppingList[順序],來查看數組中該順序的元素是什麼,並且我們可以將其內容修改。
你可以使用下標腳本語法來一次改變一個數組內範圍的值,就算替換與兩者長度不同。下面這個例子是我把[ 炸雞、啤酒、漢堡和薯條 ]換成用[ 麥當勞 和 肯德基 ]代替。
你可以用 for - in 方式來查看一個數組中全部項目
如果你需要每個項目的值以及值的序,可以使用 enumerated ( )方法來查看數組
合集將同一類型且不重複的值無序地儲存在一個集合當中。當元素的順序不那麼重要的時候你就可以使用合集來代替數組,或者你需要確保元素不會重複的時候。
為了能讓類型儲存在合集當中,它必須是 hashable 的——就是說類型必須提供計算它自身 hashValue 的方法。hashValue 是Int值且所有的對比起來相等的對像都相同,比如 a == b ,它遵循 a . hashValue == b . hashValue 。
所有 Swift 的基礎類型(比如 String , Int , Double ,和 Bool)默認都是 hashable 的,並且可以用於合集或者字典的鍵。沒有關聯值的枚舉成員值同樣默認 hashable。
你可以使用你自己自定義的類型作為合集的值類型或者字典的 key 類型,只要讓它們遵循 Swift 的 Hashable 協議即可。遵循 Hashable 協議的類型必須提供可獲取的叫做 hashValue的 Int屬性。通過 hashValue 屬性返回的值不需要在同一個程序的不同的執行當中都相同,或者不同程序。
因為 Hashable協議遵循 Equatable,遵循的類型必須同時一個“等於”運算符( == )的實現。也就是說, 必須滿足以下三個條件,其中 a , b ,和 c 是任意值:
你可以使用初始化器語法來創建一個確定類型的空合集
同樣的我們都可以用上述在 Array 中的新增、刪除、插入和修改的功能。
想當然的也能使用 String 創建合集,Swift 也能幫我們判斷 game2 是 String 類型,所以我們也不用特地去說明他的類型,同時,我們也能使用 hasValue 來判斷這兩個 set 內容是否相同。
insert , remove 的方式都與 Array 大同小異,在這邊我們簡單舉例一個例子,這段程式碼會判斷你刪去了什麼食物,並 print 出你剛剛刪除了什麼,如果這個值不存在,則返回"我沒有買那樣食物"。
下列這個例子則是使用 contains 來判斷合集中是否擁有該元素,他得出的值是 Bool 值,也就是 true 或 false ,如果這結果是為 true 則列出我有買炸雞, false 則是相反。
你同樣的可以使用 for in 語法來遍歷合集,查看裡頭的元素。同時,你也可以使用 sorted() 來使他們排序。
下邊的圖描述了 a 和 b 兩個合集在各種合集操作下的結果,用綠色部分表示兩者所包含的區域。
下圖中有 a, b, c 三個合集,重疊區域則代表有共有的值, a 是 b 的超集,所以 a 包含了 b 的所有值。反句話說 b 是 a 的子集,所以 b 的所有值都被 a 給包含,然後 b 和 c 不相交,所以他們沒有共有值。
字典儲存無序的互相關聯的同一類型的鍵(key)和同一類型的值的集合。每一個值都與唯一的鍵相關聯。不同於數組中的元素,字典中的元素沒有特定的順序。當你需要尋找特定標記的值的時候就可以使用字典這個方式。
如前面兩者的創建方式相同,只是字典多了一個鍵值可以使用,鍵值與後面的值可以是不同類型。
同樣你也可以使用字串方式創建他的值以及他的鍵值,如果你的值的類型都是 String 字串型別的話,你也不需特別在前面加上 [String:String] 告訴他類型,之後就能使用字串類型的鍵值呼叫。
這些內容想必大家應該滾瓜爛熟了,只跟前面的內容差在需要多一個「 鍵值 」就能處理,所以我用一張圖來說明。
你還可以使用 updateValue 方式來修改原有鍵值中的內容,也能將鍵值中的值設為 nil 。
你依然可以使用 for - in 語法來查看字典中的鍵值及內容。