据我所知,我可以使用inject方法在Ruby中对数组中对象的属性求和。例如,我可以使用以下内容汇总数组中所有代理的现金:
sum_of_cash = agents.inject(0) { |sum, e| sum + e.cash }
但是,如何才能仅对属性的正值或负值求和,例如仅对正或负现金余额求和?
我能想到的一种方法是在数组上进行循环,只有在使用if函数值为正时才进行求和,但如果可能的话,我正在寻找更清晰的方法。
谢谢!
答案 0 :(得分:4)
我认为这样的事情更优雅
agents.map(&:cash).select { |c| c > 0 }.inject(&:+)
答案 1 :(得分:0)
我可以想到两种方式,在注入中不需要if
:
将适当的方法添加到代理对象。然后你可以编写以下代码:
sum_of_cash = agents.inject(0) { |sum, e| sum + e.positive_cash }
注射前过滤:
sum_of_case = agents.map(&:cash).keep_if{|c| c > 0 }.reduce(&:+)
答案 2 :(得分:0)
agents.select{|e| e.cash > 0}.inject(0) { |sum, e| sum + e.cash }