0

インジェクトメソッドを使用して、Rubyの配列内のオブジェクトのプロパティを合計できることを理解しています。たとえば、次を使用して、配列内のすべてのエージェントの現金を合計できます。

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

ただし、プロパティの正または負の値のみ、つまり、たとえば正または負の現金残高のみを合計するにはどうすればよいですか?

私が考えることができる1つの方法は、配列に対してループを実行し、if関数を使用して値が正の場合にのみ合計することですが、可能であれば、よりクリーンなメソッドを探しています。

ありがとう!

4

3 に答える 3

4

このようなものはもう少しエレガントだと思います

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

ifインジェクトの内部を必要としない2つの方法を考えることができます:

  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 に答える