3

これはネストされたハッシュです。「小計」のすべての値を ruby​​ の方法で合計したい。追加を実行するとき、「0」と「1342119042142」のキーは他の不明な文字列である可能性があることに注意してください(キーの数は少なくとも1つです。複数の場合もあります)。

{"0"=>{"lease_item_id"=>"3",
 "subtotal"=>"100"},
 "1342119042142"=>{"lease_item_id"=>"1",
 "subtotal"=>"100",
 "_destroy"=>"false"}}}

ありがとう。

4

3 に答える 3

3

このような:

ハッシュを設定します。

s = {"0"=>{"lease_item_id"=>"3", "subtotal"=>"100"},
     "1342119042142"=>{"lease_item_id"=>"1", "subtotal"=>"100","_destroy"=>"false"}}

合計を計算する:

total = s.inject(0) { |i, j| i + j.last["subtotal"].to_i}

説明:ここでドキュメントを探してください。基本的injectに初期値が与えられ(上記のコードでは0です)、指定された値を指定されたブロックに渡します。ここで、各反復でブロックから返される値に設定されます。したがって、上記のコードでは、最初は0であり、最初の反復では100に設定され0 + 100、現在は100に等しく、2番目の[そして最後の]反復では100 + 100200に設定されています。

于 2012-07-12T18:21:04.683 に答える
2

hがハッシュであり、小計が10進値であると仮定します。

h.values.sum{|x| x['subtotal'].to_f}
于 2012-07-12T18:21:54.160 に答える
1
hash = {"0"=>{"lease_item_id"=>"3", "subtotal"=>"100"}, "1342119042142"=>{"lease_item_id"=>"1", "subtotal"=>"100", "_destroy"=>"false"}} 

sum = hash.values.reduce(0){|sum,inner| sum + inner["subtotal"].to_i } 
于 2012-07-12T19:13:27.287 に答える