Dictionary: Swift中的字典类型
Dictionary
- 字典储存无序的互相关联的同一类型的键和同一类型的值的集合
- 字典类型的全写方式Dictionary<Key, Value>,简写方式[Key: Value], 建议使用简写方式
- 字典的key必须是可哈希的
创建空字典
- 初始器方式
- 简写方式
- 字面量方式
字面量创建字典
- [key 1: value 1, key 2: value 2, key 3: value 3]
count和isEmpt
- 可以使用count只读属性来找出Dictionary拥有多少元素
- 使用布尔量isEmpty属性检查字典是否为空
遍历字典
- For-In 循环
- 可以通过访问字典的keys和values属性来取回可遍历的字典的键或值的集合
- Swift的Dictionary类型是无序的。要以特定的顺序遍历字典的键或值,使用键或值的sorted()方法
字典的常见操作
添加或更新元素
- 使用下标添加或更新元素
- 使用updateValue(_:forKey:)方法添加或更新元素,返回一个字典值类型的可选项值
移除元素
- 使用下标脚本语法给一个键赋值nil来从字典当中移除一个键值对
- 使用removeValue(forKey:)来从字典里移除键值对。这个方法移除键值对如果他们存在的话,并且返回移除的值,如果值不存在则返回nil
合并两个字典
- merge(_:uniquingKeysWith:)
//注意merge方法已经被废弃了vardict= ["a":1,"b":2] print(dict.merging(["a":2, "c":5], uniquingKeysWith: {(current, _) ->Intincurrent})) //merging方法是返回的新的值//merge会改变原来的值,没有返回值
firstIndex
- 虽然字典是无序的,但是每个kv对在扩容之前的位置是稳定的。如果你需要保持顺序的kv对可以使用KeyValuePairs
底层实现探索
从下标操作谈起
Dictionary._Variant的setValue
_NativeDictionary的setValue
_NativeDictionary的_insert
_NativeDictionary的uncheckedInitialize
_NativeDictionary的findKey