###rubyの知識を問題を解きながら、何が分かってて何が分かっていないかを洗い出して、復習するシリーズ
という知識を深める用アウトプットをしていくよ
ではさっそく。vol.1
##問題
puts hash.keys
puts hash.values
というメソッドを実行した時に
キー1st
キー2nd
キー3rd
1
2
3
とターミナルに表示されるような変数hashを作成するためのコードをシンボルを使って記述する。
hash = {キー1st:1, キー2nd:2, キー3rd:3}
よし、解けた。
でも、ターミナルで動かすまで{ }じゃなく[ ]で囲んでて
Traceback (most recent call last):
test.rb:3:in `<main>': undefined method `keys' for [{:キー1st=>1, :キー2nd=>2, :キー3rd=>3}]:Array (NoMethodError)
のエラーを出しました。。。
ハッシュと聞くとなぜか反射的に[ ]が思いついちゃうんだよな。まだ染み込みが浅い。
##さて、おさらい
配列の場合は1種類の情報(名前や、○○の成績、など)を複数入れておいて、まとめて取得したり、添字を使って指定した●番目の情報のみを取り出したりできる。
が、2つの情報を紐付けたい(Aさんは100点、Bさんは80点、など)のときは、ハッシュを使うとよい。
上の問題では「キー1st」と「1」を紐付けてる。
ので、「Aさんは100点、Bさんは80点」をハッシュで作りたいときは
score = {A:100, B:80}
こんな感じ。
また、ハッシュは**「キー」と「バリュー」**で構成されている。
キー:情報の名前(Aさん、Bさん) *キーには、文字列も数値も使用できる!
バリュー:情報の値(100点、80点)
配列が添字(順番)で管理してたのに対し、ハッシュはキーで管理する。
なお、キーの書き方は3種類ある。
↑認識誤りでした!
@scivola様からコメントでご指摘いただきました。ありがとうございます!
コメントに@scivola様の記事リンクがございますので、お読みいただいてる皆様も是非。
key1 = {"A" => 100}
key2 = {:A => 100}
key3 = {A: 100}
この わけじゃないんですね。key1,2,3
は全部同じ扱いになる!
そして、key2,3はシンボルという書き方。
シンボルというのは、見た目は文字列だけど、処理のときには数値として扱われるそうで。
見た目が見やすくて、という理由しか覚えてなかったけど、数値として扱われることで処理速度が速くなるという理由もありました。復習復習。
2度美味しいのね、シンボル。
ということで、key3の書き方で問題は解きました!
##まとめ
正直、ハッシュも配列もめちゃめちゃ使用頻度高いと思うんだけど、なんだか苦手意識強くて。
でも、今じっくりめでおさらいできたので、少しは払拭できたかな?
間違ってること、もっとこうしたらいいよというアドバイスなどありましたら、コメントいただけると嬉しいです!
楽しいを軸に続けていきたい。
それでは、また次の投稿で!