Techioz Blog

Rubyハッシュのmap_values()?

概要

Ruby には、ハッシュの値のみを変換/マッピングするための Hash メソッドがありません。

h = { 1 => [9,2,3,4], 2 => [6], 3 => [5,7,1] }
h.map_values { |v| v.size }
#=> { 1 => 4, 2 => 1, 3 => 3 } 

これを Ruby でアーカイブするにはどうすればよいでしょうか?

更新:map_values() の実装を探しています。

# more examples
h.map_values { |v| v.reduce(0, :+) }
#=> { 1 => 18, 2 => 6, 3 => 13 } 

h.map_values(&:min)
#=> { 1 => 2, 2 => 6, 3 => 1 }

解決策

Ruby 2.4 では、Hash#transform_values メソッドと Hash#transform_values メソッドが導入されました。望ましい動作で。

h = { 1=>[9, 2, 3, 4], 2=>[6], 3=>[5, 7, 1] }
h.transform_values { |e| e.size }
#=> {1=>4, 2=>1, 3=>3}