如何对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
相关产品推荐
相关产品推荐

