You need to enable JavaScript to run this app. 如何对KeyValuePairs字典中相同key对应的value值进行求和
优惠活动
大模型
产品
解决方案
定价
更多

如何对KeyValuePairs字典中相同key对应的value值进行求和

实现方案

Swift 中 KeyValuePairs 允许存在重复的 key,你可以通过 reduce(into:) 方法快速遍历所有元素并对相同 key 的 value 做累加:

let dic: KeyValuePairs = ["foo":2,"bar":3,"bat":5, "foo":5,"bat":7,"bar":5]

let result = dic.reduce(into: [String: Int]()) { partialResult, pair in
    partialResult[pair.key, default: 0] += pair.value
}

print(result) // 输出:["foo":7, "bar":8, "bat":12]

代码说明

  • reduce(into:_:) 方法会初始化一个空的 [String: Int] 字典作为累加容器
  • 遍历 KeyValuePairs 中的每一个键值对时,用字典的下标默认值语法,如果 key 不存在就默认从0开始累加,存在就直接在原有值基础上加上当前 pair 的 value

如果你需要保留 KeyValuePairs 的顺序特性,也可以用循环遍历的方式手动实现:

import SwiftUI // 需要用到 uniqued() 方法去重key序列,不需要保留顺序可省略这部分

let dic: KeyValuePairs = ["foo":2,"bar":3,"bat":5, "foo":5,"bat":7,"bar":5]
var orderedResult: KeyValuePairs<String, Int> = []
var tempDict: [String: Int] = [:]

for pair in dic {
    tempDict[pair.key, default: 0] += pair.value
}
// 按原始 key 首次出现的顺序输出
let uniqueKeys = dic.map(\.key).uniqued()
for key in uniqueKeys {
    orderedResult.append((key: key, value: tempDict[key]!))
}

print(orderedResult) // 输出:["foo": 7, "bar": 8, "bat": 12]

内容的提问来源于stack exchange,提问作者Janmejay Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:00:03