LoginSignup
0

More than 1 year has passed since last update.

Ruby 問題② ハッシュの基礎について

Posted at

はじめに

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を取り出すためにはハッシュ[取得したい値のキー][取得したい値のキー]
で取り出すため、

ハッシュ[:user][::profile][:name]

となります。

また配列の中にハッシュがあるため余計なものを取り除かなければなりません。
1度問題のまま取り除いたらどうなるか検証してみます。

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文で呼び出すと簡潔に記述する事ができます

変数.each do |ブロック変数|
ブロック変数 = [][][]

解答では

user_data.each do |u|
  puts u[:user][:profile][:name]
end

となります。

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
0