0
我有哈希部门红宝石:获取嵌套的哈希值的总和
{"Mechnical" => {"boys" => "25", "girls"=>"5"}, "Civil"=> {"boys"=>"18", "girls"=>"12"}}
我想这样的输出,
{"Mechanical" => "30", "Civil => "30"}
我有哈希部门红宝石:获取嵌套的哈希值的总和
{"Mechnical" => {"boys" => "25", "girls"=>"5"}, "Civil"=> {"boys"=>"18", "girls"=>"12"}}
我想这样的输出,
{"Mechanical" => "30", "Civil => "30"}
做如下
# If you are in Ruby 2.1 or greater
your_hash.map { |k,v| [k, v.reduce(0) { |sum, (_, v)| sum + v.to_i }] }.to_h
# => {"Mechnical"=>30, "Civil"=>30}
# below Ruby 2.1
Hash[your_hash.map { |k,v| [k, v.reduce(0) { |sum, (_, v)| sum + v.to_i }] }]
# => {"Mechnical"=>30, "Civil"=>30}
# for all versions
your_hash.each_with_object({}) do |(k,v), h|
h[k] = v.reduce(0) { |sum, (_, v)| sum + v.to_i }
end
# => {"Mechnical"=>30, "Civil"=>30}
h = { "Mechnical" => {"boys" => "25", "girls"=>"5"},
"Civil"=> {"boys"=>"18", "girls"=>"12"} }
h.map { |k, v| [k, v.values.map(&:to_i).sum] }.to_h
# => {"Mechnical"=>30, "Civil"=>30}
或者
Hash[ h.map { |k, v| [k, v.values.map(&:to_i).sum]} ]
# => {"Mechnical"=>30, "Civil"=>30}
由于您使用Rails,sum
会的工作,其他的合理使用inject(:+)
你为什么_suggest_ 2个额外的中间阵列? ('v.values.map(&:to_i)') – 2014-09-19 13:20:24
简单......我认为在这个规模下,性能增益可以忽略不计。我的猜测是这个数组不会大于2. :) – Santhosh 2014-09-19 15:34:52