2012-01-03 27 views
1

私はRails 3.1で相対的なnoobとして作業していますが、このコード(dateとamount_centsはdb属性)を使用して、dbからdate-ordered配列にユーザトランザクション量を抽出することができました:配列要素の積算合計の計算方法は?

@user_trans = User.transactions.order( "date")。map {| t | t.amount_cents}

=> [1000、-350、-250、600、750、-450]

Iが容易で、アレイの合計を得る:user_trans.sum = @

> 1300

しかし、私はちょうど把握することはできませんすることは、配列の各要素を反復処理し、合計を実行し、その結果、第二、第二第三に、などへの最初の要素を追加するためのエレガントな方法です:

[1000,650,400,1000,1750,1300]

各方法や.injectが使用されているようですが、複雑なマルチラインハックの外では、これを行うための魔法の構文が見つかりませんでしたが、合理的なアプローチが必要です。注文は重要です。たぶん全体を回帰させてから、逆にするのでしょうか?私は希望に満ちた期待して、あなたの足元に座って

... :)

答えて

4

ここでワンライナーです。 to_iは、結果配列が空である最初の要素を処理するために必要です(nil.to_i0と評価されます)。

@user_trans.inject([]) { |result, element| result << result.last.to_i + element } 
+0

恐ろしいです!完璧にエレガント。それは私が行方不明だった最後のセレクターでした。ありがとう。 – awvidmer