22 Swift中的字典
2023-03-12 本文已影响0人
为了自由的白菜
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方法已经被废弃了
var dict = ["a":1,"b":2]
print(dict.merging(["a":2, "c":5], uniquingKeysWith: {(current, _) -> Int in current}))
//merging方法是返回的新的值
//merge会改变原来的值,没有返回值
firstIndex
- 虽然字典是无序的,但是每个kv对在扩容之前的位置是稳定的。如果你需要保持顺序的kv对可以使用KeyValuePairs

底层实现探索
从下标操作谈起

Dictionary._Variant的setValue

_NativeDictionary的setValue

_NativeDictionary的_insert

_NativeDictionary的uncheckedInitialize

_NativeDictionary的findKey
