2016-12-23 2 views
0

のサブ値合計するので、私は次のように私はハッシュを持ってプロジェクトに取り組んでいます:は、インデックス付きハッシュ

{ 1=>{:id=>133, 
    :total=>#<BigDecimal:cc08558,'0.41323E3',18(18)>}, 
    2=>{:id=>134, 
     :total=>#<BigDecimal:cc082b0,'0.523E1',18(18)>}, 
    6=>{:id=>166, 
     :total=>#<BigDecimal:cbdbb98,'0.837E2',18(18)>}, 
    8=>{:id=>168, 
     :total=>#<BigDecimal:cbdb8a0,'0.72236E3',18(18)>}, 
    9=>{:id=>169, 
     :total=>#<BigDecimal:cbdb738,'0.132E3',9(18)>} } 

と私はすべての合計を持っている、このハッシュに要素を追加したいですハッシュ内の合計値。

{ 1=>{:id=>133, 
    :total=>#<BigDecimal:cc08558,'0.41323E3',18(18)>}, 
    2=>{:id=>134, 
     :total=>#<BigDecimal:cc082b0,'0.523E1',18(18)>}, 
    6=>{:id=>166, 
     :total=>#<BigDecimal:cbdbb98,'0.837E2',18(18)>}, 
    8=>{:id=>168, 
     :total=>#<BigDecimal:cbdb8a0,'0.72236E3',18(18)>}, 
    9=>{:id=>169, 
     :total=>#<BigDecimal:cbdb738,'0.132E3',9(18)>}, 
    0=>{:id=>000, 
     :total=><whatever the total is>} } 

が、私はこれは私が持っている現時点では終らいくつかの問題を抱えている:

month_hash.each.sum(:total) 

しかし、これは私が欲しいものをやっているようには見えません。次のように結果がされた状態で

ご協力いただければ幸いです。

答えて

0

あなたは、すべてのサブハッシュを取得し、ハッシュを反復し、合計を合計するinjectを使用するvaluesを使用することができます。

sum = h.values.inject(0){|sum,h| sum + h[:total] } 
h[0] = {:id => 0, :total => sum} 

hは今です:

{1=>{:id=>133, :total=>413.23}, 
2=>{:id=>134, :total=>5.23}, 
6=>{:id=>166, :total=>83.7}, 
8=>{:id=>168, :total=>722.36}, 
9=>{:id=>169, :total=>132.0}, 
0=>{:id=>0, :total=>1356.52}} 

注場合は、そのもう一度実行すると、合計を2回追加します:

{1=>{:id=>133, :total=>413.23}, 
2=>{:id=>134, :total=>5.23}, 
6=>{:id=>166, :total=>83.7}, 
8=>{:id=>168, :total=>722.36}, 
9=>{:id=>169, :total=>132.0}, 
0=>{:id=>0, :total=>2713.04}} 
関連する問題