假设我有一个代码,我想用高阶函数reduce()
来计算数字的平均值:
var ofAvg = [1,2,3,4,5]
var doAvg = ofAvg.reduce(0) { $0 + $1 }
doAvg/ofAvg.count //This gives me the correct answer which in this case is 3.
但是当我这样做时:
var ofAvg = [1,2,3,4,5]
var doAvg = ofAvg.reduce(0) { ($0 + $1)/ofAvg.count }
我得到的输出为1
。我在做什么错了?我对reduce()
的理解不是它实际上是什么吗?是否有可能在doAvg/ofAvg.count
方法之外不必reduce()
获得平均值?
答案 0 :(得分:4)
在完成所有求和之后,你只需要进行一次除法:
var ofAvg = [1,2,3,4,5]
var doAvg = ofAvg.reduce(0) { $0 + $1 } / ofAvg.count
在这种情况下,您甚至不需要单独关闭,因为+
已经具有您正在寻找的相同类型((Int, Int) -> Int
),因此您可以直接使用它:
var doAvg = ofAvg.reduce(0, combine: +) / ofAvg.count
P.S。请使用更好的名字。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。