0
0

More than 1 year has passed since last update.

Ruby2

Last updated at Posted at 2023-01-25

問題

配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。

user_data = [
 {user: {profile: {name: 'George'}}},
 {user: {profile: {name: 'Alice'}}},
 {user: {profile: {name: 'Taro'}}},
]

user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
ただし、出力結果は次のようになるものとします。

ターミナルの表示
George
Alice
Taro



模範解答

模範解答1
user_data.each do |u|
  puts u[:user][:profile][:name]
end

あるいは

模範解答2
user_data.each{ |u| puts u.dig(:user, :profile, :name) }

【解説】

ハッシュから特定の値を取得する場合は、その値に対応するキーを指定します。以下の書き方で取得ができます。

使用例
ハッシュ[取得したい値のキー]

また、二重ハッシュから特定の値を取得する場合は、取得したい値のキーまで連続して指定すると取得できます。

使用例
ハッシュ[取得したい値のキー][取得したい値のキー]

今回取得したい値は、George, Alice, Taroという値です。
よって、取得したい値に対応するキーはnameというキーだということが分かります。
そのため、nameというキーまで連続して指定すると、George, Alice, Taroという値を取得できます。

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

また、今回は配列の中にハッシュが格納されています。
そのため、each文でハッシュの1つ1つを取り出した上で、上記の記述を行うことが必要です。

模範解答1
user_data.each do |u|
  puts u[:user][:profile][:name]
end

発展的な別解として、digメソッドを用いても取得できます。digメソッドはRubyに標準で組み込まれているメソッドで、多重階層にあるハッシュの値をまとめて取得できます。

まずは、簡単な解答を理解する方が大切なので興味がある方はdigメソッドを検索してみてください。
わかりやすく解説している記事がたくさんヒットすると思います。

0
0
0

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
0