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 3 years have passed since last update.

【Ruby】ハッシュの中にハッシュがある時の出力方法(値の指定など)

Last updated at Posted at 2020-08-21

自分用のメモとしてハッシュの中にハッシュがある時の出力方法をここに記載します。

ちなみに私は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 」なので、先頭にあるキーを先に記述して、次の{}内にあるキーを指定すると上手く指定したキーの値を取り出すことができるようです。

私と同じように「この場合、特定の値を取り出すにはどうすればいい!?」とお困り方は参考程度に試してみてください^^

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?