Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@N396184501

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

はじめに

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

となります。

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
N396184501
3月から学習開始! 旅行会社からエンジニアへ!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?