了解reduce()

时间:2016-07-06 20:55:41

标签: swift reduce

假设我有一个代码,我想用高阶函数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()获得平均值?

1 个答案:

答案 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。请使用更好的名字。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。