Swift中字典存储的多数组对应位置元素求和实现问题
解决方案
你之前用空数组作为初始值结果为空,是因为zip操作会以两个输入数组中更短的长度作为结果长度,空数组和任意数组zip的结果都是空数组,所以不能用空数组作为初始累加值。
基础版(适配数组长度一致的场景)
不需要提前指定数组长度,直接取字典中第一个数组作为初始累加值,再遍历剩余数组累加即可:
let aa = [ "Ride" : [1, 1, 1, 1, 1, 1, 1, 1], "Run" : [2, 1, 1, 1, 1, 1, 1, 1], "Swim" : [3, 1, 1, 1, 1, 1, 1, 1], "Other" : [4, 1, 1, 1, 1, 1, 1, 1] ] let allArrays = Array(aa.values) // 字典为空直接返回空数组 guard !allArrays.isEmpty else { let result: [Int] = [] // 此处补充你的空字典处理逻辑 print(result) exit(0) } var combined = allArrays[0] for array in allArrays.dropFirst() { combined = zip(combined, array).map(+) } print(combined) // 输出:[10, 4, 4, 4, 4, 4, 4, 4]
兼容版(适配数组长度不一致的场景)
如果未来需要支持不同长度的数组,可以自动取所有数组的最大长度作为结果长度,长度不足的数组对应位置按0计算:
let allArrays = Array(aa.values) let maxLength = allArrays.map(\.count).max() ?? 0 var combined = Array(repeating: 0, count: maxLength) for array in allArrays { for i in 0..<maxLength { combined[i] += i < array.count ? array[i] : 0 } } print(combined)
内容的提问来源于stack exchange,提问作者app4g
相关产品推荐
相关产品推荐

