您的位置:首页 > 移动开发 > Swift

Swift-字典

2016-05-05 12:14 274 查看
原本我以为 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") */


其实是我看别人的代码的时候被误导了,所以在此记录一下。规范的命名很重要啊。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift iOS 语言 字典 遍历