这是一个嵌套哈希。我们想以 ruby 的方式将“小计”的所有值相加。请注意,执行加法时,“0”和“1342119042142”的键可以是任何其他未知字符串(键的个数至少为1,也可以多于1)。
{"0"=>{"lease_item_id"=>"3",
"subtotal"=>"100"},
"1342119042142"=>{"lease_item_id"=>"1",
"subtotal"=>"100",
"_destroy"=>"false"}}}
谢谢。
这是一个嵌套哈希。我们想以 ruby 的方式将“小计”的所有值相加。请注意,执行加法时,“0”和“1342119042142”的键可以是任何其他未知字符串(键的个数至少为1,也可以多于1)。
{"0"=>{"lease_item_id"=>"3",
"subtotal"=>"100"},
"1342119042142"=>{"lease_item_id"=>"1",
"subtotal"=>"100",
"_destroy"=>"false"}}}
谢谢。
像这样:
设置哈希:
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,在第一次迭代中它被设置为0 + 100
现在等于 100,在第二次 [也是最后一次] 迭代中它被设置为100 + 100
200。
假设 h 是您的哈希,并且小计可以是十进制值:
h.values.sum{|x| x['subtotal'].to_f}
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 }