二重ハッシュを紐解く

 二重ハッシュのデータから特定の情報だけを取り出す方法を書きたいと思います。

users = [
{user: {profile: {name: '佐藤', age: 22}}},
{user: {profile: {name: '鈴木', age: 30}}},
{user: {profile: {name: '田中', age: 40}}},
]

 ここから、名前、もしくは年齢だけ取り出したい時にどうするかについて説明します。

 

  1. eachを使う
  2. キーを連続して指定する
  3. 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

 これで今度は名前だけが出力されるようになります。

佐藤
鈴木
田中

 

 

 以上です。