3

这是一个嵌套哈希。我们想以 ruby​​ 的方式将“小计”的所有值相加。请注意,执行加法时,“0”和“1342119042142”的键可以是任何其他未知字符串(键的个数至少为1,也可以多于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,在第一次迭代中它被设置为0 + 100现在等于 100,在第二次 [也是最后一次] 迭代中它被设置为100 + 100200。

于 2012-07-12T18:21:04.683 回答
2

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

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 回答