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

如何用元组返回类型实现返回整数数组总和、平均值、最值的函数?

扩展函数以支持总和与平均值计算

你可以在一次遍历中同时完成最小值、最大值、总和的计算,最后推导平均值,这样能避免多次遍历数组,效率更高。以下是修改后的代码:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:40:34