美文网首页
22 Swift中的字典

22 Swift中的字典

作者: 为了自由的白菜 | 来源:发表于2023-03-12 09:29 被阅读0次

Dictionary: Swift中的字典类型

Dictionary

  • 字典储存无序的互相关联的同一类型的键和同一类型的值的集合
  • 字典类型的全写方式Dictionary<Key, Value>,简写方式[Key: Value], 建议使用简写方式
  • 字典的key必须是可哈希的

创建空字典

  • 初始器方式
  • 简写方式
  • 字面量方式
image-20230225212716312.png

字面量创建字典

  • [key 1: value 1, key 2: value 2, key 3: value 3]
image-20230225212910159.png

count和isEmpt

  • 可以使用count只读属性来找出Dictionary拥有多少元素
  • 使用布尔量isEmpty属性检查字典是否为空

遍历字典

  • For-In 循环
  • 可以通过访问字典的keys和values属性来取回可遍历的字典的键或值的集合
  • Swift的Dictionary类型是无序的。要以特定的顺序遍历字典的键或值,使用键或值的sorted()方法
image-20230225213234467.png

字典的常见操作

添加或更新元素

  • 使用下标添加或更新元素
  • 使用updateValue(_:forKey:)方法添加或更新元素,返回一个字典值类型的可选项值

移除元素

  • 使用下标脚本语法给一个键赋值nil来从字典当中移除一个键值对
  • 使用removeValue(forKey:)来从字典里移除键值对。这个方法移除键值对如果他们存在的话,并且返回移除的值,如果值不存在则返回nil

合并两个字典

  • merge(_:uniquingKeysWith:)
image-20230225215147511.png
//注意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
image-20230225215501704.png

底层实现探索

从下标操作谈起

image-20230225221148792.png

Dictionary._Variant的setValue

image-20230225222805657.png

_NativeDictionary的setValue

image-20230225222901907.png

_NativeDictionary的_insert

image-20230225223011448.png

_NativeDictionary的uncheckedInitialize

image-20230225223108655.png

_NativeDictionary的findKey

image-20230225223209378.png

相关文章

网友评论

      本文标题:22 Swift中的字典

      本文链接:https://www.haomeiwen.com/subject/mwmfrdtx.html