【一人 bugs.ruby Advent Calendar 2020】[Feature #17315] Hash #transform【12日目】

一人 bugs.ruby Advent Calendar 2020 12日目の記事になります。

[Feature #17315] Hash #transform

これは Hash の中身を変更して Hash を返す Hash#transform Hash#transform! を追加する提案です。

h = {'name' => 'dominic ', 'email' => 'dominic.mail.com '}

# キーを String から Symbol に変換したり値の前後のスペースを削除したりする
h.transform! { |k,v| [k.to_sym, v.strip] }
h # => {name: 'dominic', email: 'dominic.mail.com'}

似たようなメソッドに Hash#map があるんですがこれだと Hash ではなくて Array を返してしまう。

h = {'name' => 'dominic ', 'email' => 'dominic.mail.com '}

p h.map { |k,v| [k.to_sym, v.strip] }
# => [[:name, "dominic"], [:email, "dominic.mail.com"]]

なのでこういう Hash を返すメソッドが欲しかった。
欲しかったんですが、実は Hash#to_h で同等の事ができるとコメントでされてました。

h = {'name' => 'dominic ', 'email' => 'dominic.mail.com '}

p h.to_h { |k,v| [k.to_sym, v.strip] }
# => {:name=>"dominic", :email=>"dominic.mail.com"}

これは知らなかったので普通に便利そう。便利そうなんだけど Hash に対して to_h を呼ぶのはなんかもにょる。