【问题标题】:Understanding reduce()理解 reduce()
【发布时间】:2016-11-09 01:45:11
【问题描述】:

假设我有一个代码,我想使用高阶函数 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() 的理解不是它的实际含义吗?在reduce() 方法之外不必做doAvg/ofAvg.count 就可以获得平均值吗?

【问题讨论】:

  • 您在每次迭代中除以计数。
  • 只需要除以元素个数一次。

标签: swift reduce


【解决方案1】:

在所有求和完成后,您只需要进行一次除法:

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

【讨论】:

  • 做到了。我完全忘记了reduce() 对数组的每个元素进行操作。太感谢了。 :)
  • 至少需要 9 分钟。我会的。再次感谢! :)
猜你喜欢
  • 2018-05-09
  • 1970-01-01
  • 2012-05-12
  • 2011-12-22
  • 1970-01-01
  • 2015-10-24
  • 1970-01-01
  • 2013-10-14
  • 2019-02-03
相关资源
最近更新 更多