ハッシュのキー名を変更する
rubyハッシュのkeyを書き換える必要がありまして
{
"hoge-01"=>{"a"=>"hoge", "b"=>"hogehoge", "c"=>"giko", "d"=>["gikogiko"]},
"hoge-01_org"=>{"a"=>"hogee", "b"=>"hogehhoge", "c"=>"giko", "d"=>["neko", "geko"]}
}
上記を、
{
"hoge01"=>{"a"=>"hoge", "b"=>"hogehoge", "c"=>"giko", "d"=>["gikogiko"]},
"hoge01org"=>{"a"=>"hogee", "b"=>"hogehhoge", "c"=>"giko", "d"=>["neko", "geko"]}
}
こうしたい。
コード
ruby2.5以降は、以下で可能です。(subdataがハッシュ)
subdata.transform_keys!{ |k| k.delete("-_") }
私のケースではkeyから"-"と"_"を排除したかったので上記のコードになってますが、下記「追記」のように変換用のハッシュを作成して、storeしてるところを任意に書き換えていただければ他の文字列への変換も可能です。
追記
scivolaさんから、単に任意の文字列を削除したいだけならばString.deleteのほうが簡単とのコメントがありまして確かにそのとおりなので本文に反映しました。もともとのコードは以下の通りです。
key_map = {}
for i in subdata.keys do
key_map.store(i,i.gsub(/-|_/,""))
end
subdata.transform_keys! {|k| key_map[k]}
key_mapにオリジナルのキー名と新しいキー名をstoreしておき、最後に一括でtransform_keys!しています。