Swift中如何获取数组最小8个值并计算其平均值?
解决方案
要从最近20杆成绩中筛选出最低8杆并计算平均值,你可以按照排序→取前N个→求和→计算平均值的步骤实现,下面是修改后的完整代码:
var scores: Array = [98, 99, 87, 86, 88, 92, 88, 87, 84, 98, 85, 84, 80, 99, 100, 101, 94, 96, 79, 99, 92, 94, 87, 99, 80] // 获取最近20杆成绩,转换为数组以便后续操作 var lastTwentyScores = Array(scores.suffix(20)) // 对成绩从小到大排序,取前8个最低分 var lowestEightScores = lastTwentyScores.sorted().prefix(8) // 计算最低8杆的总和 var totalLowestEight = lowestEightScores.reduce(0, +) // 计算平均值 var avgLowestEight = Double(totalLowestEight) / 8 // 计算高尔夫指数 var index = avgLowestEight - 72
泛化问题:计算数组中最小N个值的总和
通用实现步骤:
- 将数组从小到大排序(
sorted()默认按升序排列) - 取排序后数组的前N个元素(使用
prefix(N)方法) - 对这N个元素求和(使用
reduce(0, +)累加)
示例代码(以取数组中最小3个值的总和为例):
let numbers = [5, 2, 9, 1, 5, 6] let n = 3 let sumOfSmallestN = numbers.sorted().prefix(n).reduce(0, +) // 最终结果为 1+2+5=8
给高尔夫爱好者的说明:本次练习假设用户仅在标准杆为72的球场打球,我知道若标准杆改变,当前程序将无法正常运行。
内容的提问来源于stack exchange,提问作者Jackfin321
相关产品推荐
相关产品推荐

