LoginSignup
1
1

More than 3 years have passed since last update.

ruby ハッシュのキー名を変更する

Last updated at Posted at 2020-12-03

ハッシュのキー名を変更する

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!しています。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1