二重ハッシュを紐解く
二重ハッシュのデータから特定の情報だけを取り出す方法を書きたいと思います。
users = [
{user: {profile: {name: '佐藤', age: 22}}},
{user: {profile: {name: '鈴木', age: 30}}},
{user: {profile: {name: '田中', age: 40}}},
]
ここから、名前、もしくは年齢だけ取り出したい時にどうするかについて説明します。
- eachを使う
- キーを連続して指定する
- digを使う
上記の流れで説明します。
1. eachを使う
まずユーザーの情報を全部取り出すようにしたいと思います。当然ながら、下記のコードではエラーが起きてしまいます。
puts users[:user]
そこでeach文を使ってみることにします。
users.each do |u|
puts u[:user]
end
このような記述をした場合、下記のような出力結果になります。
{:profile=>{:name=>"佐藤", :age=>22}}
{:profile=>{:name=>"鈴木", :age=>30}}
{:profile=>{:name=>"田中", :age=>40}}
2. キーを連続して指定する
これで後は名前もしくは年齢だけを出力させたいので、連続してキーを指定します。
users.each do |u|
puts u[:user][:profile][:age]
end
このような記述をすることで年齢だけが出力されるようになります。
22
30
40
3. digを使う
別解としてdigメソッドを使うこともできます。
users.each do |u|
puts u.dig(:user, :profile, :name)
end
これで今度は名前だけが出力されるようになります。
佐藤
鈴木
田中
以上です。