0

我知道我可以使用注入方法在 Ruby 中对数组中对象的属性求和。例如,我可以使用以下命令将数组中所有代理的现金相加:

sum_of_cash = agents.inject(0) { |sum, e| sum + e.cash }

但是,我如何才能仅对属性的正值或负值求和,例如,仅对正值或负值现金余额求和?

我能想到的一种方法是对数组进行循环并仅在值为正时使用 if 函数求和,但如果可能的话,我正在寻找一种更简洁的方法。

谢谢!

4

3 回答 3

4

我认为这样的东西更优雅一点

agents.map(&:cash).select { |c| c > 0 }.inject(&:+)
于 2012-07-05T17:54:20.443 回答
0

我可以想到两种不需要if内部注入的方法:

  1. 将适当的方法添加到代理对象。然后你可以编写以下代码:

    sum_of_cash = agents.inject(0) { |sum, e| sum + e.positive_cash }

  2. 注射前过滤:

    sum_of_case = agents.map(&:cash).keep_if{|c| c > 0 }.reduce(&:+)

于 2012-07-05T18:00:57.557 回答
0
 agents.select{|e| e.cash > 0}.inject(0) { |sum, e| sum + e.cash }
于 2012-07-05T18:01:05.167 回答