Hashのキーをリネームする
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