如何以ruby的方式在嵌套哈希中添加值

时间:2012-07-12 18:10:53

标签: ruby-on-rails ruby

这是一个嵌套的哈希。我们想以ruby的方式将“小计”的所有值加在一起。请注意,执行添加时,“0”和“1342119042142”的键可以是任何其他未知字符串(键的数量至少为一个。可能多于一个)。

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

感谢。

3 个答案:

答案 0 :(得分: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}

说明:查看here以获取文档。基本上inject被赋予一个初始值(在上面的代码中它是0)并且它将给定的值传递给给定的块,在那里它被设置为每次迭代中从块返回的值。所以在上面的代码中,最初它是0,在第一次迭代时它被设置为0 + 100并且现在等于100,并且在第二次[和最终]迭代中它被设置为100 + 100, 200。

答案 1 :(得分:2)

假设h是您的哈希值,小计可以是十进制值:

h.values.sum{|x| x['subtotal'].to_f}

答案 2 :(得分: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 }