天天看點

Swift字典集合

字典表示一種非常複雜的集合,允許按照某個鍵來通路元素。字典是由兩部分集合構成的,一個是鍵(key)集合,一個是值(value)集合。鍵集合是不能有重複元素的,而值集合是可以重複的,鍵和值是成對出現的。

如下圖所示是字典結構的“學号與學生”集合,學号是鍵集合,不能重複,學生是值集合,可以重複。

Swift字典集合

提示 字典中鍵和值的集合是無序的,即便在添加的時候是按照順序添加的,當取出這些鍵或值的時候,也會變得無序。字典集合更适合通過鍵快速通路值,就像查英文字典一樣,鍵就是要查的英文單詞,而值是英文單詞的翻譯和解釋等。有的時候,一個英文單詞會對應多個翻譯和解釋,這也是與字典集合特性對應的。

一、字典聲明與初始化

Swift為字典提供了Dictionary結構體類型,我們在聲明一個字典的時候可以使用下面的語句。

var studentDictionary: Dictionary<Int, String>

其中,變量studentDictionary明确指定類型為Dictionary<Int, String>。其中<Int, String>是泛型,這表明鍵的集合是Int類型,值的集合是String類型。

上面聲明的集合事實上還不能用,還需要進行初始化,集合類型往往是在聲明的同時進行初始化的。示例代碼如下:

var studentDictionary1: Dictionary<Int, String> = [102 : "張三",105 : "李四", 109 : "王五"]	①
 
var studentDictionary2 = [102 : "張三",105 : "李四", 109 : "王五"]	②
 
let studentDictionary3 = [102 : "張三",105 : "李四", 109 : "王五"]        	③
 
var studentDictionary4 = Dictionary<Int, String>()        	④
           

上述代碼都是對字典進行聲明和初始化,代碼①~③行采用[102 : "張三",105 : "李四", 109 : 

"王五"]的方式進行初始化,這是字典的表示方式,文法如下圖所示。

Swift字典集合

這個文法類似于JSON中的對象,字典以“{”(左括号)開始,以“}”(右括号)結束。每個鍵後跟一個“:”(冒号),“鍵-值”對之間使用“,”(逗号)分隔。

第③行是let聲明字典,let聲明的字典是不可變字典,必須在聲明的同時初始化,一旦被初始化就不可以被修改。

代碼第④行是初始化一個空的字典,鍵集合為Int類型,值集合為String,初始化後沒有任何元素。

二、字典的修改

我們可以對字典中的元素進行追加、删除和替換等修改操作。字典元素的追加比較簡單,隻要給一個不存在的鍵賦一個有效值,就會追加一個“鍵-值”對元素。

字典元素删除有兩種方法,一種是給一個鍵指派為nil,就可以删除元素;另一種方法是通過字典的removeValueForKey方法删除元素,方法傳回值是要删除的值。

字典元素替換也有兩種方法,一種是直接給一個存在的鍵指派,這樣新值就會替換舊值;另一種方法是通過updateValue(forKey:)方法替換,方法的傳回值是要替換的值。

下面我們來看一個示例:

var studentDictionary = [102 : "張三",105 : "李四", 109 : "王五"]	①
 
studentDictionary[110] = "董六"        	②
 
println("班級人數:\(studentDictionary.count)")         	③
 
let dismissStudent = studentDictionary.removeValueForKey(102)   	④
 
println("開除的學生:\(dismissStudent)")         	⑤
 
studentDictionary[105] = nil        	⑥
 
studentDictionary[109] = "張三"        	⑦
 
let replaceStudent = studentDictionary.updateValue("李四", forKey:110)	⑧
println("被替換的學生是:\(replaceStudent)")         	⑨
           

輸出結果如下:

班級人數:4

開除的學生:張三

被替換的學生是:董六

上述代碼第①行是聲明并初始化字典studentDictionary,第②行代碼追加鍵為110、值為“董六”的一個元素,第③行代碼是列印班級學生的人數,count是字典的屬性,傳回字典的長度。

第④行和第⑥行都是删除元素,第④行代碼是使用removeValueForKey方法删除元素,dismissStudent是傳回值,它保持了被删除的元素。是以我們在第⑤行列印輸出dismissStudent是“開除的學生:張三”。第⑥行studentDictionary[105] = nil語句是直接指派nil也可以删除105對應的元素。

第⑦行和第⑧行都是替換舊元素,如果第⑦行的鍵不存在,那麼結果是在字典中追加一個新的“鍵-值”對元素。第⑧行是通過updateValue(forKey:)方法替換元素,方法的傳回值是“董六”,第⑨行代碼是列印“被替換的學生是:董六”。

三、字典周遊

字典周遊集合也是字典的重要操作。與數組不同,字典有兩個集合,是以周遊過程可以隻周遊值的集合,也可以隻周遊鍵的集合,也可以同時周遊。這些周遊過程都是通過for in循環實作的。

下面是周遊字典的示例代碼:

var studentDictionary = [102 : "張三",105 : "李四", 109 : "王五"]
 
println("---周遊鍵---")
for studentID in studentDictionary.keys {        	①
    println("學号:\(studentID)")
}
 
println("---周遊值---")
for studentName in studentDictionary.values {       	②
    println("學生:\(studentName)")
}
 
println("---周遊鍵:值---")
for (studentID, studentName) in studentDictionary {   	③
    println ("\(studentID) : \(studentName)")
}
           

運作結果如下:

---周遊鍵---

學号:105

學号:102

學号:109

---周遊值---

學生:李四

學生:張三

學生:王五

---周遊鍵:值---

105 : 李四

102 : 張三

109 : 王五

從上述代碼可見,我們有3種方法周遊字典,它們都采用了for in語句。第①行代碼周遊了鍵集合,其中keys是字典屬性,可以傳回所有鍵的集合。第②行代碼周遊了值的集合,其中values是字典屬性,可以傳回所有值的集合。第③行代碼周遊取出的字典元素,(studentID, studentName)是元組類型,它是由鍵變量studentID和值變量studentName組成的。

更多内容請關注國内第一本Swift圖書 《Swift開發指南》 本書交流讨論網站: http://www.51work6.com/swift.php 歡迎加入Swift技術讨論群:362298485

歡迎關注智捷iOS課堂微信公共平台

Swift字典集合