Swift字典集合

2021-08-27 19:19:32 字數 4027 閱讀 6780

字典表示一種非常複雜的集合,允許按照某個鍵來訪問元素。字典是由兩部分集合構成的,乙個是鍵(key

)集合,乙個是值(

value

)集合。鍵集合是不能有重複元素的,而值集合是可以重複的,鍵和值是成對出現的。

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

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

一、字典宣告與初始化

swift為字典提供了dictionary結構體型別,我們在宣告乙個字典的時候可以使用下面的語句。

var studentdictionary: dictionary

其中,變數studentdictionary明確指定型別為dictionary。其中是泛型,這表明鍵的集合是int型別,值的集合是string型別。

上面宣告的集合事實上還不能用,還需要進行初始化,集合型別往往是在宣告的同時進行初始化的。示例**如下:

[html]view plain

copy

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 : 

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

這個語法類似於json

中的物件,字典以「」(右括號)結束。每個鍵後跟乙個「:」(冒號),「鍵-值」對之間使用「,」(逗號)分隔。

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

**第④行是初始化乙個空的字典,鍵集合為int型別,值集合為string,初始化後沒有任何元素。

二、字典的修改

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

字典元素刪除有兩種方法,一種是給乙個鍵賦值為nil,就可以刪除元素;另一種方法是通過字典的removevalueforkey方法刪除元素,方法返回值是要刪除的值。

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

下面我們來看乙個示例:

[html]view plain

copy

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迴圈實現的。

下面是遍歷字典的示例**:

[html]view plain

copy

var 

studentdictionary

= [102 : "張三",105 : "李四", 109 : "王五"]  

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

for studentid in studentdictionary.keys   

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

for studentname in studentdictionary.values   

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

for (studentid, studentname) in studentdictionary   

執行結果如下:

---遍歷鍵---

學號:105

學號:102

學號:109

---遍歷值---

學生:李四

學生:張三

學生:王五

---遍歷鍵:值---

105 : 李四

102 : 張三

109 : 王五

從上述**可見,我們有3

種方法遍歷字典,它們都採用了for in語句。第①行**遍歷了鍵集合,其中keys是字典屬性,可以返回所有鍵的集合。第②行**遍歷了值的集合,其中values是字典屬性,可以返回所有值的集合。第③行**遍歷取出的字典元素,(studentid, studentname)是元組型別,它是由鍵變數studentid和值變數studentname組成的。

《swift開發指南》

本書交流討論**:

歡迎加入swift技術討論群:362298485

Swift 集合字典 六

字典是一種儲存相同型別多重資料的儲存器,每個值都關聯讀的鍵,鍵作為字典中的這個值資料的識別符號.和陣列中的資料項不同,字典中的資料項並沒有具體順序.一.建立字典 varairports dictionary tyo tokyo dub dublin varf varstudents1 diction...

swift字典集合 備

swift字典表示一種非常複雜的集合,允許按照某個鍵來訪問元素。字典是由兩部分集合構成的,乙個是鍵 key 集合,乙個是值 value 集合。鍵集合是不能有重複元素的,而值集合是可以重複的,鍵和值是成對出現的。字典宣告與初始化 swift字典型別是dictionary,也是乙個泛型集合。在宣告乙個d...

swift集合型別 陣列和字典

swift 語言提供了陣列和字典兩種集合型別來儲存集合資料。陣列用來按順序儲存相同型別的資料。字典則是以無序的方式來儲存鍵值對 key,value 陣列和字典都是強型別的,也就意味著,陣列和字典在宣告時必須指明型別。本篇部落格我們來分別討論swift中的陣列和字典 陣列就是以乙個從頭到尾的順序儲存相...