##はじめに##
GWも絶賛学習中!
本日もよろしくお願い致します。
##問題##
複数のユーザ情報をハッシュとして持つ変数user_dateがあります。
ruby.rb
user_data = [
{user: {profile: {name: 'Sugano'}}},
{user: {profile: {name: 'Sakamoto'}}},
{user: {profile: {name: 'Okamoto'}}},
]
このデータの名前だけを出力するように記述してください。
出力結果は以下の通りです。
ruby.rb
Sugano
Sakamoto
Okamoto
##ヒント##
・配列とハッシュを組み合わせ
・名前を配列から取り出している(each文)
・2重にされています
##解答##
ruby.rb
user_data.each do |u|
puts u[:user][:profile][:name]
end
##解説##
ハッシュから特定のキーを取り出す場合は **ハッシュ[取得したい値のキー]**で取り出す事が可能です。
今回は2重になっていました。
userの中にprofileがあり、その中にnameがあります。
奥底にある:nameを取り出すためにはハッシュ[取得したい値のキー][取得したい値のキー]
で取り出すため、
.rb
ハッシュ[:user][::profile][:name]
となります。
また配列の中にハッシュがあるため余計なものを取り除かなければなりません。
1度問題のまま取り除いたらどうなるか検証してみます。
.rb
user_data = [
{user: {profile: {name: 'Sugano'}}},
{user: {profile: {name: 'Sakamoto'}}},
{user: {profile: {name: 'Okamoto'}}},
]
puts user_data[0]
#添字で呼び出す事で配列[0]に入っているデータが取得できる
{:user=>{:profile=>{:name=>"Sugano"}}}
#問題のように3人のnameだけを取り出す場合は下記のようになる
puts user_data[0][:user][:profile][:name]
puts user_data[1][:user][:profile][:name]
puts user_data[2][:user][:profile][:name]
Sugano
Sakamoto
Okamoto
3人を呼び出すには同じ記述をしなければいけないのでeach文で呼び出すと簡潔に記述する事ができます
.rb
変数.each do |ブロック変数|
ブロック変数 = [][][]
解答では
.rb
user_data.each do |u|
puts u[:user][:profile][:name]
end
となります。