Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 841

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

$
0
0
はじめに プログラミング初心者のつまづきポイントである【配列】と【ハッシュ】。 当記事では「Keishiの引越し物語」を通して、これらの特徴や違いをまとめます。 また、最後に物語をRubyコードにあてはめるとどうなるのかも見てみましょう。 当記事では、分かりやすさ優先のため、サンプルコードで変数名などに日本語を使用しています。本来は英語表記が定石ですので、ご注意お願いいたします。 環境 macOS BigSur Ver11.2.3 Ruby 2.6.5. 用語説明 当記事では、配列とハッシュを理解していただくために、 各用語を「Keishiの引越し物語」でイメージしながら解説していきます。 <物語中の例え> * 段ボール ⇨ 配列(①) * 生活用品や服などのモノ ⇨ オブジェクト(②) * 思い出のおもちゃをしまうアルミ缶 ⇨ 子要素としての配列(③) * コードダス ⇨ ハッシュ(④) さっそく解説に入りましょう! ①「配列」ってなに? 【第1話】 Keishiはめでたく、コプセルコーポレーションにエンジニア就職が決まり、西の都に引越し予定。いつものように調子に乗って前日まで準備をおサボりして、大慌て。しょうがないので、仕分けは諦めて段ボールにブチ込むことにしました。 配列とは、色々なモノを格納できる「箱」のようなモノです。 ここではモノを詰める「段ボール」が配列ですね。 段ボールには何でも入ります。 生活用品や服などのモノ(オブジェクト)はもちろん、 おもちゃを集めたアルミ缶ケースも。 整理するかどうかもあなた次第。 このように、何でも入る便利な「箱」のことを、配列と言います。 ②「オブジェクト」ってなに? 【第2話】 Keishiはとりあえず、生活用品や服などの「モノ」を手当たり次第にブチこんでいます。 オブジェクトとはなにか? 本当は「役割」とか色々ありますけど、 まずは大雑把に「モノ」のことだと思ってください。 ここでは「生活用品や服などのモノ」のことですね。 補足すると、「オブジェクトが入った配列」もオブジェクトの一つです。 この点は③で理解しましょう。 ③「子要素としての配列」ってなに? 【第3話】 Keishiは少年のままなので、思い出のおもちゃ(温たまごっちや骨消し)を捨てられません。引越し先に持っていきたいのですが、段ボールは大きすぎるので、アルミ缶にしまいました。そしてそのアルミ缶を、思い出とともにそっと段ボールにしまいました。 配列は「箱」です。 実は箱の中には、さらに箱を入れることも可能なのです。 「箱の中にある箱」を子要素としての配列といいます。 子要素があるということは、親要素もありますね。 「箱をしまう箱」を親要素としての配列といいます。 ここでは、 「アルミ缶ケース」が子要素としての配列、 「段ボール」が親要素としての配列 ですね。 ここまでで、配列とオブジェクトの感覚は掴めたと思います。 では、「ハッシュ」とはなんでしょうか? ④「ハッシュ」ってなに? Keishiは無事におもちゃをアルミ缶にしまいましが、新しい問題発生です。 「ドラゴンボールX」のコードダスも持っていきたいのですが、 コードは付番されており、アルミ缶の中にごちゃ混ぜに入れるのは、 コレクターとして非常に抵抗があります。(こーいうところだけ几帳面です) そこでKeishiは、「コードダスアルバム」にコードを整理して収納しました。 これでコードNoも、キャラクターもわかりやすくなりました。 ここではそれぞれ、以下のように該当します。 コードダスアルバム → 配列 コード → 変数 掲載情報(カードNoやキャラクターなど) → 【ハッシュ】 「キャラクター」「BP(戦闘力)」などの属性名 → 【キー】 「フリーゾ」「530000」などの属性値 → 【バリュー】 なんだか新しいワードが出てきましたね。 実はハッシュを理解するためには、新しいワードを理解する必要があります。 この記事を読んでいる方は「変数」は理解されていると思うので、その他を説明します。 コードを「変数」とした場合、 掲載されている情報(属性名&属性値)のまとまりを【ハッシュ】といいます。 ハッシュの中身をさらに細かく見てみましょう。 属性名のことを【キー】、属性値のことを【バリュー】といいます。 ハッシュ(キーとバリューの組み合わせ)を変数に格納し、 今度は変数を配列の中に格納することを繰り返すことで、 整理整頓された配列を生み出すことができるわけですね。 引越し物語の世界では、コードのハッシュはあらかじめ集***社によって 記述(格納)されていますが、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万です"}

Viewing all articles
Browse latest Browse all 841

Trending Articles