2016-07-06 110 views
1

想我已经在这里我要计算使用高阶函数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()的理解是不是它实际上是什么? reduce()方法之外的doAvg/ofAvg.count是否可以获得平均值?

+1

在每次迭代中,您将被计数除。 –

+1

您只需要除以元素数量一次。 – itskoBits

回答

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 

PS请使用更好的名字。变量应该是名词(或名词短语),功能应该是动词(或动词短语)。

+0

这样做。我完全忘记了reduce()对数组的每个元素执行操作。非常感谢。 :) – Dershowitz123

+0

至少需要9分钟。我会尽我所能。再次感谢! :) – Dershowitz123

+0

OK :)请参阅我的编辑 – Alexander