0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby 練習問題2 ~二重ハッシュ~

Last updated at Posted at 2022-07-03

こんにちは、プログラミング初学者"fujitacoma"です!

今回は、Ruby練習問題シリーズの2回目です。
1回目より少しは難易度上がったかな、、?

それでは早速始めます!

問題

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

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

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

George
Alice
Taro

解答と解説

模範解答

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

もしくは

user_data.each{ |u| puts u.dig(:user, :profile, :name) }

解説

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

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

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

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

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

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

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

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

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

最後に

いかがでしたでしょうか!
eachメソッドを使う際はいつも||の中の変数名を考えすぎてしまいます。笑

今回、別解として出てきた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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?