了解减少()

Understanding reduce()

假设我有一段代码,我想使用高阶函数 reduce():

计算数字的平均值
var ofAvg = [1,2,3,4,5]

var doAvg = ofAvg.reduce(0) { [=10=] +  }

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) { ([=11=] + )/ofAvg.count }

我得到的输出是 1。我做错了什么?我对 reduce() 的理解不是它的实际含义吗?是否可以在 reduce() 方法之外不必执行 doAvg/ofAvg.count 来获得平均值?

你只需要做一次除法,在所有的求和之后:

var ofAvg = [1,2,3,4,5]

var doAvg = ofAvg.reduce(0) { [=10=] +  } / ofAvg.count

在这种情况下你甚至不需要单独的闭包,因为 + 已经有你正在寻找的相同类型 ((Int, Int) -> Int),所以你可以直接使用它:

var doAvg = ofAvg.reduce(0, combine: +) / ofAvg.count

P.S. 请使用更好的名称。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。