You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按值求和合并两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:12:47