如何按值求和合并两个Swift字典
嘿,这个需求很常见!要实现这种合并两个字典,重复键对应的值相加,非重复键保留原值的功能,Swift里有两种很实用的写法,刚好适配你给出的例子:
方法一:基础遍历法(直观易懂)
先以其中一个字典为基础,然后遍历另一个字典的所有键值对,逐个处理:
let dict1 = ["A": 1, "B": 2, "D": 5] let dict2 = ["A": 3, "C": 9, "D": 4] // 先把dict1的内容复制到新字典dict3中 var dict3 = dict1 // 遍历dict2的每一项 for (key, value) in dict2 { // 如果key已存在,就把旧值和新值相加;不存在就直接用新值(相当于0+value) dict3[key] = (dict3[key] ?? 0) + value } print(dict3) // 输出:["A": 4, "B": 2, "C": 9, "D": 9]
方法二:函数式reduce写法(简洁优雅)
用Swift的reduce(into:)函数可以一行完成这个逻辑,本质和上面的遍历是一样的,但写法更紧凑:
let dict1 = ["A": 1, "B": 2, "D": 5] let dict2 = ["A": 3, "C": 9, "D": 4] let dict3 = dict2.reduce(into: dict1) { result, (key, value) in result[key] = (result[key] ?? 0) + value } print(dict3) // 同样得到期望结果
这里的reduce(into:)会把dict1作为初始的结果容器,然后遍历dict2的每个键值对,更新容器内的内容——逻辑和遍历法完全一致,只是更符合Swift的函数式编程习惯。
两种方法都能完美得到你想要的dict3,看你个人偏好选择就好啦~
内容的提问来源于stack exchange,提问作者Tim Schellenberg
相关产品推荐
相关产品推荐

