Hashのキーをリネームしたかったけどデフォルトのメソッドはないようなので書いた
class Hash
def rename_key(old:, new:)
return unless has_key?(old)
return if has_key?(new)
self[new] = self.delete(old)
self
end
end使い方
h = {a: 1, b: 2}
{
:a => 1,
:b => 2
}
[92] pry(main)> h.rename_key(old: :a, new: :c)
{
:b => 2,
:c => 1
}変更前のキーが存在しない時と、変更後のキーが存在する時は何もしない。
実際の入れ替え処理はself[new] = self.delete(old)だけで終わってます。
参考
http://kmckelvin.com/blog/2014/06/renaming-items-in-a-ruby-hash