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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:54:03