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

