Swift-字典

原本我以爲 Swift 中的字典和其它語言中的字典應該差不多,所以不打算單獨寫一篇關於字典的博客。可學習了之後我才發現 Swift 中的字典竟然有很多與衆不同的地方。嚇得我趕緊記錄一下。。。


和其它語言中一樣的地方就沒啥好說的了,我們直接來說它與衆不同的地方。

我們先拿數組來做比較。首先,在數組中肯定不能訪問不存在的下標,否則會出現越界的錯誤,這點大家都知道。


但是,字典卻可以!

var dict = ["key1":"value1" , "key2":"value2"]
dict["key3"] = "value3"
print(dict) // 輸出結果爲 ["key1": "value1", "key3": "value3", "key2": "value2"] (別忘了字典是無序的)
我們訪問了一個不存在的 key3,最終結果是創建了新的一項。


然後來說 nil,還記得上篇文章我們怎麼講 nil 的嗎?


只有最下面這種寫法纔是正確的。但是字典又可以!

var dict = ["key1":"value1", "key2":"value2", "key3":"value3"]
dict["key2"] = nil
print(dict) // 輸出結果爲 ["key1": "value1", "key3": "value3"]
我們直接把鍵爲 key2 的值賦成 nil,最終結果是從字典中移除了這一項。

增加新項還有其它方式,比如:

dict.updateValue("123", forKey: "key4")
如果有 key4 這一項,會更新該項。如果沒有這項的話就會新增這一項。


刪除項也有其它方式,比如:

dict.removeValueForKey("key1") // 這裏即使寫不存在的也不會出錯,比如"key8"、"key9"


然後我們來說說字典的遍歷。

遍歷所有的鍵:

for keys in dict.keys {
    print(keys)
}
/*
 key1
 key3
 key2
 */

這種比較好理解。還可以直接利用 keys 構造一個新數組:

let keysArray = Array(dict.keys)
print(keysArray)
/*
 ["key1", "key3", "key2"]
 */

上面這些都比較好理解,但還有其它方式:

for (key, _) in dict {
    print(key)
}
/*
 key1
 key3
 key2
 */
注意 '_' 的用法,此處代表我們只關心 key,不關心 value。


類似的,獲取 value 也有這些方法:

for values in dict.values {
    print(values)
}
/*
 value1
 value3
 value2
 */

let valuesArray = Array(dict.values)
print(valuesArray)
/*
 ["value1", "value3", "value2"]
 */

for (_, value) in dict {
    print(value)
}
/*
 value1
 value3
 value2
 */

那如果想同時獲取 key 和 value 呢?

for (key, value) in dict {
    print(key, value)
}
/*
 key1 value1
 key3 value3
 key2 value2
 */

嗯,這個也比較好理解,那你猜猜下面的代碼輸出是什麼?

for key in dict {
    print(key)
}
估計會有很多人和我一樣,認爲是輸出三個 key 吧?

然而,事實卻是:

/*
 ("key1", "value1")
 ("key3", "value3")
 ("key2", "value2")
 */


咦?這是爲什麼呢?哈哈,其實是被誤導了。這裏的 key 跟字典中的鍵完全沒有關係,這裏的 key 只不過是個參數名而已,叫什麼都可以。如果寫成下面這樣是不是就懂了:

for aDictionary in dict {
    print(aDictionary)
}
/*
 ("key1", "value1")
 ("key3", "value3")
 ("key2", "value2")
 */

其實是我看別人的代碼的時候被誤導了,所以在此記錄一下。規範的命名很重要啊。。。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章