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