假设我有一个代码,我想在其中使用高阶函数计算数字的平均值:
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/