了解减少()
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. 请使用更好的名称。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。
假设我有一段代码,我想使用高阶函数 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. 请使用更好的名称。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。