自分用のメモとしてハッシュの中にハッシュがある時の出力方法をここに記載します。
ちなみに私は2020年8月21日現在、Rubyの学習を開始して21日程度の初学者です。この記事に辿り着いた方は、私のわかる範囲で記述しているということを踏まえて参考程度にご覧ください。
##「ハッシュの中にハッシュがある時」とは?
data = { user: { name: "satou", age: 33 } }
↑これのことです。
初心者からしたら、「何じゃこれ!?」って感じですよね。私も「俺が知っているハッシュじゃない・・」と困惑しました。
こういう状態のハッシュのことを多次元(2次元、3次元)とかって呼ぶそうですよ。
##ハッシュの中にハッシュがある時(多重)の出力方法
data = { user: { name: "satou", age: 33 } }
【出力】
p data
push data
とりあえず data に格納された情報全てを出力するなら、と思い上の2つを試したところ、以下のような結果となりました。
p data => {:user=>{:name=>"satou", :age=>33}}
push data => error
予想通りの結果ですね。
続いてキーを指定しての出力について紹介します。
###ハッシュの中にハッシュがある時のキーを指定した出力方法
data = { user: { name: "satou", age: 33 } }
【出力】
p data[:user] => {:name=>"satou", :age=>33}
p data[:name] => nil
p data[:age] => nil
多重ではない普通のハッシュの時の出力方法と同様に、 p data[:] で出力したところ、[:name], [:age] の時は何と nil が返ってきました。
普通に出力したのではダメのようですね。
コードを見てわかる通り、user: の中のnameやageという状態となっているため普通には出力させてくれないようです。
ということで、いろいろとググった結果、下記の方法で name と age の値を指定して取り出すことができました。
data = { user: { name: "satou", age: 33 } }
【出力】
p data[:user][:name] => "satou"
p data[:user][:age] => 33
考え方としては、「キー:user の中の キー:name,age 」なので、先頭にあるキーを先に記述して、次の{}内にあるキーを指定すると上手く指定したキーの値を取り出すことができるようです。
私と同じように「この場合、特定の値を取り出すにはどうすればいい!?」とお困り方は参考程度に試してみてください^^