我知道我可以使用注入方法在 Ruby 中对数组中对象的属性求和。例如,我可以使用以下命令将数组中所有代理的现金相加:
sum_of_cash = agents.inject(0) { |sum, e| sum + e.cash }
但是,我如何才能仅对属性的正值或负值求和,例如,仅对正值或负值现金余额求和?
我能想到的一种方法是对数组进行循环并仅在值为正时使用 if 函数求和,但如果可能的话,我正在寻找一种更简洁的方法。
谢谢!
我认为这样的东西更优雅一点
agents.map(&:cash).select { |c| c > 0 }.inject(&:+)
我可以想到两种不需要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(&:+)
agents.select{|e| e.cash > 0}.inject(0) { |sum, e| sum + e.cash }