我想使用reduce
方法改善此总和,但我看到这对于求和很有效,但我还要做一个减法:
final = 0
@status.each do |data|
final = final + data['pending_increase'] - data['pending_decrease']
end
我想要使用的方法是Enumerable#reduce
答案 0 :(得分:4)
这样的事情:
@status.reduce(0){|sum, data| sum + data['pending_increase'] - data['pending_decrease']}
或
@status.map{|data| data['pending_increase'] - data['pending_decrease']}.reduce(0, :+)
答案 1 :(得分:2)
这也可以(因为初始种子是0
),但不会按要求使用reduce
@status.sum{|data| data['pending_increase'] - data['pending_decrease']}
这两个表达式是等效的,sum
比map
/ reduce
更短更简单
enum.sum{...} == enum.map{...}.reduce(0, :+)
答案 2 :(得分:0)
如果这是在rails应用程序中,您可以这样做:
@status.map{|data| data['pending_increase'] - data['pending_decrease']}.sum
答案 3 :(得分:0)
您可以先计算差异,然后将它们相加:
@status.map { |data| data['pending_increase'] - data['pending_decrease'] }.reduce(:+)
但这有一个缺点,就是创建一个临时数组。
只是说'。