如何使用 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']}
这两个表达式是等价的,sum
比map
/reduce
更短更简单
enum.sum{...} == enum.map{...}.reduce(0, :+)
您可以先计算差值,然后求和:
@status.map { |data| data['pending_increase'] - data['pending_decrease'] }.reduce(:+)
但这有创建临时数组的缺点。
随便说说。
我想使用 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']}
这两个表达式是等价的,sum
比map
/reduce
enum.sum{...} == enum.map{...}.reduce(0, :+)
您可以先计算差值,然后求和:
@status.map { |data| data['pending_increase'] - data['pending_decrease'] }.reduce(:+)
但这有创建临时数组的缺点。
随便说说。