假设我有一个代码,我想在其中使用高阶函数计算数字的平均值:

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 }

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

最佳答案

求和后,只需进行一次除法:

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

请用更好的名字。变量应该是名词(或名词短语),函数应该是动词(或动词短语)。

关于swift - 了解reduce(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38233628/

10-12 20:08