Swift-字典

字典

字典是一種存儲多個相同類型的值的容器叠骑。每個值(value)都關(guān)聯(lián)唯一的鍵(key),鍵作為字典中的這個值數(shù)據(jù)的標識符沦童。和數(shù)組中的數(shù)據(jù)項不同谊惭,字典中的數(shù)據(jù)項并沒有具體順序。

  • 字典類型簡化語法
    Swift 的字典使用Dictionary<Key, Value>定義凌停,其中Key是字典中鍵的數(shù)據(jù)類型汽摹,Value是字典中對應于這些鍵所存儲值的數(shù)據(jù)類型。
    我們也可以用[Key: Value]這樣簡化的形式去創(chuàng)建一個字典類型苦锨。
    注意:
    一個字典的Key類型必須遵循Hashable協(xié)議,就像Set的值類型趴泌。

初始化字典

創(chuàng)建一個空字典
  • 使用構(gòu)造語法
var namesOfIntegers = [Int: String]()
// namesOfIntegers 是一個空的 [Int: String] 字典
namesOfIntegers[16] = "sixteen"
// namesOfIntegers 現(xiàn)在包含一個鍵值對
namesOfIntegers = [:]
// namesOfIntegers 又成為了一個 [Int: String] 類型的空字典
  • 用字典字面量創(chuàng)建字典
    一個鍵值對是一個key和一個value的結(jié)合體舟舒。在字典字面量中,每一個鍵值對的鍵和值都由冒號分割嗜憔。這些鍵值對構(gòu)成一個列表秃励,其中這些鍵值對由方括號包含、由逗號分割:
[key 1: value 1, key 2: value 2, key 3: value 3]
//使用var聲明吉捶,表示可變的可以添加數(shù)據(jù)
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
//airports字典被聲明為一種[String: String]類型夺鲜,這意味著這個字典的鍵和值都是String類型。
//簡短定義方法呐舔,因為Swift能夠根絕內(nèi)容數(shù)據(jù)推斷數(shù)據(jù)類型
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

訪問和修改字典

  • 取某個字典的數(shù)據(jù)項數(shù)量:通過字典的只讀屬性count
print("The dictionary of airports contains \(airports.count) items.")
// 打印 "The dictionary of airports contains 2 items."(這個字典有兩個數(shù)據(jù)項)
  • 判斷是否是空字典:使用布爾屬性isEmpty
if airports.isEmpty {
    print("The airports dictionary is empty.")
} else {
    print("The airports dictionary is not empty.")
}
// 打印 "The airports dictionary is not empty."
  • 使用下標來添加新的數(shù)據(jù)項
airports["LHR"] = "London"
// airports 字典現(xiàn)在有三個數(shù)據(jù)項
  • 使用下標語法來改變特定鍵對應的值
airports["LHR"] = "London Heathrow"
// "LHR"對應的值 被改為 "London Heathrow
``
- 使用updateValue(_:forKey:)方法
updateValue(_:forKey:)方法可以設(shè)置或者更新特定鍵對應的值币励。就像上面所示的下標示例,updateValue(_:forKey:)方法在這個鍵不存在對應值的時候會設(shè)置新值或者在存在時更新已存在的值珊拼。和上面的下標方法不同的食呻,updateValue(_:forKey:)這個方法返回更新值之前的原值。這樣使得我們可以檢查更新是否成功澎现。updateValue(_:forKey:)方法會返回對應值的類型的可選值仅胞。
如果有值存在于更新前,則這個可選值包含了舊值剑辫,否則它將會是nil干旧。

if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
print("The old value for DUB was (oldValue).")
}
// 輸出 "The old value for DUB was Dublin."

- 使用下標語法來在字典中檢索特定鍵對應的值
因為有可能請求的鍵沒有對應的值存在,字典的下標訪問會返回對應值的類型的可選值妹蔽。如果這個字典包含請求鍵所對應的值椎眯,下標會返回一個包含這個存在值的可選值,否則將返回nil:

if let airportName = airports["DUB"] {
print("The name of the airport is (airportName).")
} else {
print("That airport is not in the airports dictionary.")
}
// 打印 "The name of the airport is Dublin Airport."

- 使用下標語法來通過給某個鍵的對應值賦值為nil來從字典里移除一個鍵值對

airports["APL"] = "Apple Internation"
// "Apple Internation" 不是真的 APL 機場, 刪除它
airports["APL"] = nil
// APL 現(xiàn)在被移除了

- removeValue(forKey:)方法也可以用來在字典中移除鍵值對
這個方法在鍵值對存在的情況下會移除該鍵值對并且返回被移除的值或者在沒有值的情況下返回nil:

if let removedValue = airports. removeValue(forKey: "DUB") {
print("The removed airport's name is (removedValue).")
} else {
print("The airports dictionary does not contain a value for DUB.")
}
// prints "The removed airport's name is Dublin Airport."

###字典遍歷
- for - in
使用for-in循環(huán)來遍歷某個字典中的鍵值對讹开。每一個字典中的數(shù)據(jù)項都以(key, value)元組形式返回盅视,并且我們可以使用臨時常量或者變量來分解這些元組

for (airportCode, airportName) in airports {
print("(airportCode): (airportName)")
}
// YYZ: Toronto Pearson
// LHR: London Heathrow

- 通過訪問keys或者values屬性

for airportCode in airports.keys {
print("Airport code: (airportCode)")
}
// Airport code: YYZ
// Airport code: LHR

for airportName in airports.values {
print("Airport name: (airportName)")
}
// Airport name: Toronto Pearson
// Airport name: London Heathrow

- keys或者values屬性
如果我們只是需要使用某個字典的鍵集合或者值集合來作為某個接受Array實例的 API 的參數(shù),可以直接使用keys或者values屬性構(gòu)造一個新數(shù)組:

let airportCodes = String
// airportCodes 是 ["YYZ", "LHR"]

let airportNames = String
// airportNames 是 ["Toronto Pearson", "London Heathrow"]

Swift 的字典類型是無序集合類型旦万。為了以特定的順序遍歷字典的鍵或值闹击,可以對字典的keys或values屬性使用sorted()方法。


[原文出自51Swift轉(zhuǎn)載請保留原文鏈接](http://www.swift51.com/swift4.0)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末成艘,一起剝皮案震驚了整個濱河市赏半,隨后出現(xiàn)的幾起案子贺归,更是在濱河造成了極大的恐慌,老刑警劉巖断箫,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂酣,死亡現(xiàn)場離奇詭異,居然都是意外死亡仲义,警方通過查閱死者的電腦和手機婶熬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃撵,“玉大人赵颅,你說我怎么就攤上這事≡萘酰” “怎么了饺谬?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長谣拣。 經(jīng)常有香客問我募寨,道長,這世上最難降的妖魔是什么森缠? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任拔鹰,我火速辦了婚禮,結(jié)果婚禮上贵涵,老公的妹妹穿的比我還像新娘格郁。我一直安慰自己,他們只是感情好独悴,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布例书。 她就那樣靜靜地躺著,像睡著了一般刻炒。 火紅的嫁衣襯著肌膚如雪决采。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天坟奥,我揣著相機與錄音树瞭,去河邊找鬼。 笑死爱谁,一個胖子當著我的面吹牛晒喷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播访敌,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼凉敲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爷抓,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤势决,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蓝撇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體果复,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年渤昌,在試婚紗的時候發(fā)現(xiàn)自己被綠了虽抄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡独柑,死狀恐怖极颓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情群嗤,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布兵琳,位于F島的核電站狂秘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏躯肌。R本人自食惡果不足惜者春,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望清女。 院中可真熱鬧钱烟,春花似錦、人聲如沸嫡丙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曙博。三九已至拥刻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間父泳,已是汗流浹背般哼。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惠窄,地道東北人蒸眠。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像杆融,于是被迫代替她去往敵國和親楞卡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 53.計算字符 在字符串中獲取字符值的數(shù)量, 可以使用字符串字符屬性中的計數(shù)屬性: let unusualMena...
    無灃閱讀 1,091評論 0 4
  • 1 .數(shù)組 Arrays 數(shù)組使用有序列表存儲同一類型的多個值。相同的值可以多次出現(xiàn)在一個數(shù)組的不同位置中臀晃。這和O...
    iceMaple閱讀 465評論 0 1
  • //var intArray:Array = [Int]();varintArray = [Int]();prin...
    XLsn0w閱讀 436評論 0 0
  • 紀錄片《生門》徽惋,真實地記錄中南醫(yī)院婦產(chǎn)科形形色色的故事上案淋。 第二集一開始,韓月的母親就大吵大鬧地說醫(yī)護人員鐘文心不...
    阿木拉閱讀 1,702評論 0 1
  • 傳言玉女.冷雨清明 文/蜀山倦客 冷雨清明险绘,又見朔風摧折踢京。征輪暫駐,為先人冥節(jié)宦棺。三杯薄酒瓣距,往事記中凝咽。墳頭白...
    寺咀山主人閱讀 237評論 2 6