Swift 4中如何计算数组所有元素总和?代码报错求解决
正确计算整数数组总和的方法
嘿,我来帮你搞定这个求和问题~
首先得说清楚你原来代码的问题所在:
- 你的数组
arr里存的是普通的整数(Int类型),这些整数根本没有points属性,所以map({$0.points})这一步完全没必要,而且会直接报错。 - 另外,虽然
reduce(0, +)在Swift里是合法的简化写法,但前提是你先正确处理了数组元素——而你这里多了一步错误的map,自然没法得到正确结果。
针对你的整数数组,正确的求和方式有两种:
1. 完整闭包写法(可读性更高)
let arr = [1,2,3,4,5,6,7,8,9,10] let totalSum = arr.reduce(0) { partialSum, currentNumber in partialSum + currentNumber }
或者进一步简化成 shorthand 形式:
let totalSum = arr.reduce(0) { $0 + $1 }
2. 操作符简写(更简洁)
Swift 允许直接用加法操作符作为reduce的第二个参数,因为它的类型刚好匹配闭包要求:
let totalSum = arr.reduce(0, +)
额外说明:如果你混淆了「自定义对象数组」的情况
如果你的数组里存的是带有points属性的自定义对象(比如下面这种),那原来的map+reduce思路是对的,只是写法需要调整:
// 示例自定义类型 struct ScoreItem { let points: Int } // 自定义对象数组 let scoreArr = [ ScoreItem(points:1), ScoreItem(points:2), ScoreItem(points:3), ScoreItem(points:4), ScoreItem(points:5), ScoreItem(points:6), ScoreItem(points:7), ScoreItem(points:8), ScoreItem(points:9), ScoreItem(points:10) ] // 正确求和:先提取points再累加 let totalPoints = scoreArr.map { $0.points }.reduce(0, +) // 更高效的写法(避免创建中间数组) let totalPointsOptimized = scoreArr.reduce(0) { $0 + $1.points }
内容的提问来源于stack exchange,提问作者senthil
相关产品推荐
相关产品推荐

