这是一个嵌套的哈希。我们想以ruby的方式将“小计”的所有值加在一起。请注意,执行添加时,“0”和“1342119042142”的键可以是任何其他未知字符串(键的数量至少为一个。可能多于一个)。
{"0"=>{"lease_item_id"=>"3",
"subtotal"=>"100"},
"1342119042142"=>{"lease_item_id"=>"1",
"subtotal"=>"100",
"_destroy"=>"false"}}}
感谢。
答案 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 }