如何用元组返回类型实现返回整数数组总和、平均值、最值的函数?
扩展函数以支持总和与平均值计算
你可以在一次遍历中同时完成最小值、最大值、总和的计算,最后推导平均值,这样能避免多次遍历数组,效率更高。以下是修改后的代码:
func arrayStats(array: [Int]) -> (min: Int, max: Int, sum: Int, average: Double) { // 用数组第一个元素初始化所有统计变量 var currentMin = array[0] var currentMax = array[0] var sum = array[0] // 遍历数组剩余元素,同步更新各项统计值 for value in array[1..<array.count] { if value < currentMin { currentMin = value } if value > currentMax { currentMax = value } sum += value } // 计算平均值,转为Double避免整数除法丢失精度 let average = Double(sum) / Double(array.count) return (currentMin, currentMax, sum, average) } // 测试代码 let stats = arrayStats(array: [8, -6, 2, 109, 3, 71]) print("min is \(stats.min), max is \(stats.max), sum is \(stats.sum), average is \(stats.average)") // 输出:min is -6, max is 109, sum is 187, average is 31.166666666666668
关键修改说明:
- 扩展返回元组,新增
sum(整数类型)和average(浮点类型)字段 - 初始化
sum变量,在遍历过程中累加每个元素值 - 平均值使用
Double类型计算,避免Swift整数除法自动截断小数部分的问题
空数组兼容优化(可选)
如果需要处理空数组的情况,可以将返回值改为可选元组,并添加空值判断:
func arrayStats(array: [Int]) -> (min: Int, max: Int, sum: Int, average: Double)? { guard !array.isEmpty else { return nil } var currentMin = array[0] var currentMax = array[0] var sum = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } if value > currentMax { currentMax = value } sum += value } let average = Double(sum) / Double(array.count) return (currentMin, currentMax, sum, average) } // 使用时需解包 if let stats = arrayStats(array: []) { print(stats) } else { print("数组为空") }
内容的提问来源于stack exchange,提问作者xyz
相关产品推荐
相关产品推荐

