Ruby 3.0 で Hash のキーを別のキーに置換する方法
例えば {foo: 1, bar: 2, baz: 3}
という Hash のキーのうち、 :baz
を :foobar
に置換して {foo: 1, bar: 2, foobar: 3}
にしたいとします。
Ruby 2.7 以前の場合
Ruby 2.7 以前だと Hash#transform_keys
のブロックの中で条件分岐させたりと少し面倒です。
# 2.7.2 hash = {foo: 1, bar: 2, baz: 3} hash.transform_keys { |key| key == :baz ? :foobar : key } #=> {:foo=>1, :bar=>2, :foobar=>3}
Hash#transform_keys (Ruby 3.0.0 リファレンスマニュアル)
他には Hash#delete
を使って元の Hash を破壊してしまう方法もあります。
# 2.7.2 hash = {foo: 1, bar: 2, baz: 3} hash[:foobar] = hash.delete(:baz) hash #=> {:foo=>1, :bar=>2, :foobar=>3}
Hash#delete (Ruby 3.0.0 リファレンスマニュアル)
Ruby 3.0 の場合
Ruby 3.0 では Hash#transform_keys
の引数に {置換前のキー => 置換後のキー}
の Hash を渡すことで簡単に置換できます。
# 3.0.0-preview2 hash = {foo: 1, bar: 2, baz: 3} hash.transform_keys(baz: :foobar) #=> {:foo=>1, :bar=>2, :foobar=>3}