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