如何使用 reduce 方法改进此总和

How can I improve this sum with reduce method

我想使用 reduce 方法改进这个总和,但我看到它很适合求和,但我还必须做一个减法:

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

我想使用的方法是Enumerable#reduce

像这样:

@status.reduce(0){|sum, data| sum + data['pending_increase'] - data['pending_decrease']}

@status.map{|data| data['pending_increase'] - data['pending_decrease']}.reduce(0, :+)

如果这是在 rails 应用程序中,您可以这样做:

@status.map{|data| data['pending_increase'] - data['pending_decrease']}.sum

这也有效(因为初始种子是 0),但不会按要求使用 reduce

@status.sum{|data| data['pending_increase'] - data['pending_decrease']}

这两个表达式是等价的,summap/reduce

更短更简单
enum.sum{...} == enum.map{...}.reduce(0, :+)

您可以先计算差值,然后求和:

@status.map { |data| data['pending_increase'] - data['pending_decrease'] }.reduce(:+)

但这有创建临时数组的缺点。

随便说说。