如何用reduce方法改善这个总和

时间:2015-11-27 12:35:26

标签: ruby-on-rails ruby sum reduce

我想使用reduce方法改善此总和,但我看到这对于求和很有效,但我还要做一个减法:

final = 0
@status.each do |data|
  final = final + data['pending_increase'] - data['pending_decrease']
end

我想要使用的方法是Enumerable#reduce

4 个答案:

答案 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']}

这两个表达式是等效的,summap / 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(:+)

但这有一个缺点,就是创建一个临时数组。

只是说'。