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}
당신이 레일을 사용하고 있기 때문에, sum
는 inject(:+)
가 왜이 개 여분의 중간 배열을 _suggest_ 않은 다른 현명한 이용, 작동합니까? ('v.values.map (& : to_i)') –
단순함.이 정도의 성능 향상은 무시할 정도로 작다고 생각합니다. 그리고 내 생각 엔이 배열은 2보다 크지 않을 것입니다. :) – Santhosh