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

如何使用Swift实现含年度/月度标记的数值汇总?

实现方案

首先需要给你的Car类型添加一个布尔属性,用来标记该金额是否为年度值:

struct Car {
    let value: Double
    let isYearly: Bool // 标记金额是否为年度值
}

接下来提供两种符合你需求的实现方式:

方式一:分类型计算后合并

这种方式逻辑清晰,先分别计算非年度金额总和、年度金额总和(再转换为月度),最后相加得到总月度数值:

var month: Double {
    // 累加所有非年度的金额
    let monthlyAmounts = cars.filter { !$0.isYearly }.reduce(0) { $0 + $1.value }
    // 累加所有年度金额并除以12转换为月度
    let yearlyAmountsConverted = cars.filter { $0.isYearly }.reduce(0) { $0 + $1.value } / 12
    // 总月度数值
    return monthlyAmounts + yearlyAmountsConverted
}

方式二:单次遍历直接计算

这种方式只需要遍历一次数组,性能更优,在遍历过程中直接判断每个金额是否需要转换为月度:

var month: Double {
    cars.reduce(0) { total, car in
        total + (car.isYearly ? car.value / 12 : car.value)
    }
}

两种方式都能实现你想要的逻辑:将年度金额除以12后计入月度总和,非年度金额直接累加。如果你的cars数组元素数量较多,更推荐第二种方式,因为它只需要一次遍历操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:59:59