LoginSignup
1
0

More than 1 year has passed since last update.

【Ruby】配列とハッシュ〜Keishiの引越し物語〜

Posted at

はじめに

プログラミング初心者のつまづきポイントである【配列】【ハッシュ】
当記事では「Keishiの引越し物語」を通して、これらの特徴や違いをまとめます。
また、最後に物語をRubyコードにあてはめるとどうなるのかも見てみましょう。

:warning:当記事では、分かりやすさ優先のため、サンプルコードで変数名などに日本語を使用しています。本来は英語表記が定石ですので、ご注意お願いいたします。

環境

  • macOS BigSur Ver11.2.3
  • Ruby 2.6.5.

用語説明

当記事では、配列とハッシュを理解していただくために、
各用語を「Keishiの引越し物語」でイメージしながら解説していきます。

<物語中の例え>
* 段ボール ⇨ 配列(①)
* 生活用品や服などのモノ ⇨ オブジェクト(②)
* 思い出のおもちゃをしまうアルミ缶 ⇨ 子要素としての配列(③)
* コードダス ⇨ ハッシュ(④)

さっそく解説に入りましょう!

①「配列」ってなに?

【第1話】
Keishiはめでたく、コプセルコーポレーションにエンジニア就職が決まり、西の都に引越し予定。いつものように調子に乗って前日まで準備をおサボりして、大慌て。しょうがないので、仕分けは諦めて段ボールにブチ込むことにしました。

配列とは、色々なモノを格納できる「箱」のようなモノです。
ここではモノを詰める「段ボール」が配列ですね。

スクリーンショット 2021-05-19 18.01.23.png

段ボールには何でも入ります。
生活用品や服などのモノ(オブジェクト)はもちろん、
おもちゃを集めたアルミ缶ケースも。
整理するかどうかもあなた次第。

このように、何でも入る便利な「箱」のことを、配列と言います

②「オブジェクト」ってなに?

【第2話】
Keishiはとりあえず、生活用品や服などの「モノ」を手当たり次第にブチこんでいます。

オブジェクトとはなにか?
本当は「役割」とか色々ありますけど、
まずは大雑把に「モノ」のことだと思ってください。

ここでは「生活用品や服などのモノ」のことですね。

スクリーンショット 2021-05-19 18.04.34.png

補足すると、「オブジェクトが入った配列」もオブジェクトの一つです。
この点は③で理解しましょう。

③「子要素としての配列」ってなに?

【第3話】
Keishiは少年のままなので、思い出のおもちゃ(温たまごっちや骨消し)を捨てられません。引越し先に持っていきたいのですが、段ボールは大きすぎるので、アルミ缶にしまいました。そしてそのアルミ缶を、思い出とともにそっと段ボールにしまいました。

配列は「箱」です。
実は箱の中には、さらに箱を入れることも可能なのです。

「箱の中にある箱」を子要素としての配列といいます。
子要素があるということは、親要素もありますね。
「箱をしまう箱」を親要素としての配列といいます。

スクリーンショット 2021-05-19 18.05.37.png

ここでは、
「アルミ缶ケース」が子要素としての配列、
「段ボール」が親要素としての配列
ですね。

ここまでで、配列とオブジェクトの感覚は掴めたと思います。
では、「ハッシュ」とはなんでしょうか?

④「ハッシュ」ってなに?

Keishiは無事におもちゃをアルミ缶にしまいましが、新しい問題発生です。
「ドラゴンボールX」のコードダスも持っていきたいのですが、
コードは付番されており、アルミ缶の中にごちゃ混ぜに入れるのは、
コレクターとして非常に抵抗があります。(こーいうところだけ几帳面です)
そこでKeishiは、「コードダスアルバム」にコードを整理して収納しました。
これでコードNoも、キャラクターもわかりやすくなりました。

ここではそれぞれ、以下のように該当します。

  • コードダスアルバム → 配列
  • コード → 変数
  • 掲載情報(カードNoやキャラクターなど) → 【ハッシュ】
  • 「キャラクター」「BP(戦闘力)」などの属性名 → 【キー】
  • 「フリーゾ」「530000」などの属性値 → 【バリュー】

なんだか新しいワードが出てきましたね。
実はハッシュを理解するためには、新しいワードを理解する必要があります。
この記事を読んでいる方は「変数」は理解されていると思うので、その他を説明します。

コードを「変数」とした場合、
掲載されている情報(属性名&属性値)のまとまりを【ハッシュ】といいます。

ハッシュの中身をさらに細かく見てみましょう。
属性名のことを【キー】、属性値のことを【バリュー】といいます。

スクリーンショット 2021-05-19 18.07.10.png

ハッシュ(キーとバリューの組み合わせ)を変数に格納し、
今度は変数を配列の中に格納することを繰り返すことで、
整理整頓された配列を生み出すことができるわけですね。

引越し物語の世界では、コードのハッシュはあらかじめ集***社によって
記述(格納)されていますが、Keishiはそのハッシュを利用して整理整頓した状態で
コードダスアルバムという配列に格納していったわけですね。

【最終話】
Keishiは段ボールの中身を確認し、必要なもの全てあるとわかりました。
ギリギリで引越し準備を終わったようですね(ギューニュー引越しセンターさん到着10分前)。
何とか無事に、コプセルコーポレーションでブルモのもとで、エンジニアとして働き始めていけそうですね。
めでたしめでたし。

Rubyコードサンプル

#【第1話】
#まずは空の段ボール(配列)を用意
danbouru = []

#【第2話】
#とにかくモノ(オブジェクト)をブチ込みます
danbouru << "生活用品"
danbouru << "(戦闘)服"

#【第3話】
# 思い出のおもちゃをしまうアルミ缶(子要素としての配列)を用意
arumi_kan = []

#温たまごっちと骨消しをアルミ缶に収納
arumi_kan << "温たまごっち"
arumi_kan << "骨消し"

#段ボール(親要素としての配列)に、アルミ缶(子要素としての配列)を思い出とともにそっとしまう
danbouru << arumi_kan

#【第4話】
#コードダスアルバム(配列)を用意
code_dasu_album = []

#コードダスアルバムに収納するカード(変数)を用意。
#コード(変数)には、集***社が情報を記述済み
code_1 = {number: 1, character: "孫母空(才王拳)", BP: 180000, quote: "はっきり言っておくぞ、瞬間的に出せる力はまだまだこんなもんじゃねぇ!"}
code_2 = {number: 2, character: "フリーゾ(第1形態)", BP: 530000, quote: "私の戦闘力は53万です"}

#コードダスアルバム(配列)にコードダス(変数)を収納
code_dasu_album << code_1
code_dasu_album << code_2

#コードダスアルバム(子要素としての配列)を段ボール(親要素としての配列)に収納
danbouru << code_dasu_album

#【最終話】
#段ボールの中身を確認
puts danbouru

#<実行結果>
#生活用品
#(戦闘)服
#温たまごっち
#骨消し
#{:number=>1, :character=>"孫母空(才王拳)", :BP=>180000, :quote=>"はっきり言っておくぞ、瞬間的に出せる力はまだまだこんなもんじゃねぇ!"}
#{:number=>2, :character=>"フリーゾ(第1形態)", :BP=>530000, :quote=>"私の戦闘力は53万です"}
1
0
2

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
1
0