Swift字典集合

字典表示一種很是複雜的集合,容許按照某個鍵來訪問元素。字典是由兩部分集合構成的,一個是鍵(key)集合,一個是值(value)集合。鍵集合是不能有重複元素的,而值集合是能夠重複的,鍵和值是成對出現的。php

以下圖所示是字典結構的「學號與學生」集合,學號是鍵集合,不能重複,學生是值集合,能夠重複。html

 


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

1、字典聲明與初始化數組

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

var studentDictionary: Dictionary<Int, String>網站

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

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

[html] view plaincopy翻譯

  1. var studentDictionary1: Dictionary<Int, String> = [102 : "張三",105 : "李四", 109 : "王五"] ①  orm

  2.    

  3. var studentDictionary2 = [102 : "張三",105 : "李四", 109 : "王五"]    ②  

  4.    

  5. let studentDictionary3 = [102 : "張三",105 : "李四", 109 : "王五"]            ③  

  6.    

  7. var studentDictionary4 = Dictionary<Int, String>()            ④  


上述代碼都是對字典進行聲明和初始化,代碼①~③行採用[102 : "張三",105 : "李四", 109 : 
"王五"]的方式進行初始化,這是字典的表示方式,語法以下圖所示。

 


這個語法相似於JSON中的對象,字典以「{」(左括號)開始,以「}」(右括號)結束。每一個鍵後跟一個「:」(冒號),「鍵-值」對之間使用「,」(逗號)分隔。

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

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

2、字典的修改

咱們能夠對字典中的元素進行追加、刪除和替換等修改操做。字典元素的追加比較簡單,只要給一個不存在的鍵賦一個有效值,就會追加一個「鍵-值」對元素。

字典元素刪除有兩種方法,一種是給一個鍵賦值爲nil,就能夠刪除元素;另外一種方法是經過字典的removeValueForKey方法刪除元素,方法返回值是要刪除的值。

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

下面咱們來看一個示例:

[html] view plaincopy

  1. var studentDictionary = [102 : "張三",105 : "李四", 109 : "王五"] ①  

  2.    

  3. studentDictionary[110] = "董六"           ②  

  4.    

  5. println("班級人數:\(studentDictionary.count)")          ③  

  6.    

  7. let dismissStudent = studentDictionary.removeValueForKey(102)       ④  

  8.    

  9. println("開除的學生:\(dismissStudent)")          ⑤  

  10.    

  11. studentDictionary[105] = nil            ⑥  

  12.    

  13. studentDictionary[109] = "張三"           ⑦  

  14.    

  15. let replaceStudent = studentDictionary.updateValue("李四", forKey:110)    ⑧  

  16. println("被替換的學生是:\(replaceStudent)")            ⑨  


輸出結果以下:

班級人數:4

開除的學生:張三

被替換的學生是:董六

上述代碼第①行是聲明並初始化字典studentDictionary,第②行代碼追加鍵爲110、值爲「董六」的一個元素,第③行代碼是打印班級學生的人數,count是字典的屬性,返回字典的長度。

第④行和第⑥行都是刪除元素,第④行代碼是使用removeValueForKey方法刪除元素,dismissStudent是返回值,它保持了被刪除的元素。所以咱們在第⑤行打印輸出dismissStudent是「開除的學生:張三」。第⑥行studentDictionary[105] = nil語句是直接賦值nil也能夠刪除105對應的元素。

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

3、字典遍歷

字典遍歷集合也是字典的重要操做。與數組不一樣,字典有兩個集合,所以遍歷過程能夠只遍歷值的集合,也能夠只遍歷鍵的集合,也能夠同時遍歷。這些遍歷過程都是經過for in循環實現的。

下面是遍歷字典的示例代碼:

[html] view plaincopy

  1. var studentDictionary = [102 : "張三",105 : "李四", 109 : "王五"]  

  2.    

  3. println("---遍歷鍵---")  

  4. for studentID in studentDictionary.keys {           ①  

  5.     println("學號:\(studentID)")  

  6. }  

  7.    

  8. println("---遍歷值---")  

  9. for studentName in studentDictionary.values {           ②  

  10.     println("學生:\(studentName)")  

  11. }  

  12.    

  13. println("---遍歷鍵:值---")  

  14. for (studentID, studentName) in studentDictionary {     ③  

  15.     println ("\(studentID) : \(studentName)")  

  16. }  


運行結果以下:

---遍歷鍵---

學號: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課堂微信公共平臺

相關文章
相關標籤/搜索