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)
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)
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)
import Accelerate
let avg = vDSP.mean(array)
Run Code Online (Sandbox Code Playgroud)
这将比迄今为止发布的所有其他解决方案快至少 50 倍。
| 归档时间: |
|
| 查看次数: |
13644 次 |
| 最近记录: |