如何在Swift-playground中编写计算平均值的方法

use*_*829 7 swift swift-playground

在swift中,我正在尝试编写一种计算平均值的方法.使用下面的方法,如果我输入平均值(5,10,15),我会在swift-playforund中显示无穷大

func average(numbers: Int...) -> Double {
    var sum = 0
    var count = 0
    for number in numbers {
        sum += number
    }
    var  ave : Double = Double(sum) / Double(count)
    return ave
}
Run Code Online (Sandbox Code Playgroud)

Jen*_*rth 22

您可以使用数组的count属性:

func average(numbers: Int...) -> Double {
    var sum = 0
    for number in numbers {
        sum += number
    }
    var  ave : Double = Double(sum) / Double(numbers.count)
    return ave
}
Run Code Online (Sandbox Code Playgroud)

  • **快速3:**`func average(numbers:Int ...)-> Double {return Double(numbers.reduce(0,+))/ Double(numbers.count)}` (2认同)

Gar*_*ies 22

只需简单的调用即可轻松实现reduce:

let array = [1.0,2.0,3.0]
var average = array.reduce(0.0) {
    return $0 + $1/Double(array.count)
}
// average = 2.0
Run Code Online (Sandbox Code Playgroud)

  • 第一次减少然后除以计数更有效。它也更优雅。 (2认同)

Mar*_*ina 19

虽然其他人已经指出了缺失的计数变量,但值得注意的是,通过使用闭包,您可以更优雅地进行平均,如下所示:

func averagec(numbers:Int...) -> Double {
    return Double(numbers.reduce(0,combine:+))/Double(numbers.count)
}
Run Code Online (Sandbox Code Playgroud)

编辑Swift 4: -

func averagec(numbers:Int...) -> Double {
    return Double(numbers.reduce(0,+))/Double(numbers.count)
}
Run Code Online (Sandbox Code Playgroud)

  • 它对我有用!只需注意,使用Swift 1.2,您必须在"+"Double之前指定"combine"(numbers.reduce(0,combine:+))/ Double(numbers.count) (4认同)

Joh*_*alo 9

import Accelerate

let avg = vDSP.mean(array)
Run Code Online (Sandbox Code Playgroud)

这将比迄今为止发布的所有其他解决方案快至少 50 倍。