我已经思考了一段时间,想了很多方法。
使用reduce时,为什么第一个元素会在执行块中定义的操作之前返回?或者我是否在reduce的工作方式上漏掉了关键点?
在下面的示例中:
arr = [1, 3, 5]
arr.reduce {|sum, n| sum + (n * 3) }
#=> 25
我本以为结果应该是27。
因为:
0 + (1 * 3) = 3
3 + (3 * 3) = 12
12 + (5 * 3) = 27
经过一段时间的尝试,我发现在第一个“tick”中,数组中的对象仅被加到总和中而不是被乘。因此,计算更像是:
??? = 1
1 + (3 * 3) = 10
10 + (5 * 3) = 25
能否有人帮我找出我走错的路在哪里?
这段内容与IT技术无关。
[1, 3, 5].reduce(0) { |sum, n| sum + n * 3 }
是你想要的 - 它使用初始值为0
(或者你传递的任何值)因此返回27
而不是25
。 - Stefan