【一人 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 を呼ぶのはなんかもにょる。