Ruby

連想配列(ハッシュ)と配列の使い分け方、違い【Ruby】

hash_array
対象者

本記事は「プログラミング初心者」を対象にしています。

連想配列(ハッシュ)と配列の使い分け方、違い

キヨシ
キヨシ
今日は連想配列(ハッシュ)と配列の使い方の一例について説明していこうと思うぞい
ケイタ
ケイタ
あー確かに配列はなんとなく分かるけどハッシュの使い所、便利さみたいのはまだよく分かってません。
キヨシ
キヨシ
うむ、実際に実務で使ってみたり、プロダクトを作ってみないと、使い方は分かっても、なかなか使い所、便利さはイメージしづらいと思うよ。

配列(Array)のおさらい

それでは、まず配列からおさらいしていきましょう。

配列とは

配列は[]で括った複数のものを入れることが出来る箱です。

ex.
fruits = [“バナナ”,”りんご”,”いちご”]
fishes = [“鮭”,”サンマ”,”アジ”]

fruitsの箱から”バナナ”を取り出したい時は、一番初めにバナナが入っているのでfruits[0]とすると取り出すことができます。

ここで注意するのは一番初めは[1]ではなくて[0]から始まることです。

同様にfishesからアジを取り出してみましょう。
3番目に入っているのでfishes[2]で取り出せます。

配列を初期化する

fruits = []

または

fruits = Array.new

配列に要素を追加する

fruits << “キウイ”

または

fruits.push(“キウイ”)


=> [“バナナ”,”りんご”,”いちご”,”キウイ”]

配列の要素数を数える

fruits = [“バナナ”,”りんご”,”いちご”,”キウイ”]

fruits.length

=> 4

このように配列は複数のものを入れることができます。

数字でも文字でも一緒に入れることができますが、先ほどの例のように同種のものである果物なら果物だけが入った配列、魚なら魚だけが入った配列など、配列の変数名が中身を見なくてもパッと見てわかるようにつけると良いでしょう。(仮に魚や果物が一緒に入った配列を作るなら変数名はfoodsなどでしょうか。)

連想配列(ハッシュ)の使い方

さて、それでは連想配列(ハッシュ)の使い方はどうでしょう。

例えば、フォームから送られてきた誰かのプロフィール(名前、性別、身長、体重)を変数に入れてデータベースに保存したいとします。

これを配列でしようとすると、

profile = [“Taro Yamada”,”male”,”177”,”65”]

という感じでしょうか。

「複数個入る箱の中にプロフィールを“雑多”にぶっこんでる」と表現しておきましょう。

確かに先ほども説明したように身長を取り出したいならprofile[2]とすれば取り出せます。

ただ、[2]ってなんかよくわからなくないですか?

このプログラムを作った数ヶ月後に見直した時に、profile[2]を見て「これは身長が入ってるな」とパッと見でわかるでしょうか?

また、自分でない他の誰かが見てパッと見で分かるでしょうか?

さらに別のファイルから呼び出した時にパッと見で分かるでしょうか?

(短いプログラムで、すぐ上にprofile = [“Taro Yamada”,”male”,”177”,”65”]が書いてあれば分かるでしょうが、、)

そこで連想配列(ハッシュ)の出番です。

まず“Taro Yamada”はprofileをさらに細分化すると名前ですね。

ですので、

profile[:name]と、してしまいましょう。

 

そして、profileの中身を見てみると、

と、なります。

さらに続いて性別もprofileに加えてみましょう。

と、なります。

こうすることによって、

profile[:gender]

パッと見で「これはプロフィールの性別が入っているんだな」と、なります。

また、:name:genderの部分のことをkey(キー)

それに対して“Taro Yamada”や”male”のこと をValue(バリュー)と呼びます。

配列、連想配列(ハッシュ)を順々に出力する場合、eachメソッドを使います。

# 連想配列(ハッシュ)

配列、連想配列(ハッシュ)を順々に出力する場合、eachメソッドを使います。

他にも実務では配列の中に配列または連想配列(ハッシュ)を入れたり、連想配列(ハッシュ)のバリューが配列だったりと様々なシチュエーションがあります。

ケイタ
ケイタ
なるほど~じゃあ要素をどう使うかを考えながら使い分けるべきなんですね。
キヨシ
キヨシ
うむ、そうじゃな。どういう時に配列、どういう時に連想配列(ハッシュ)と決まっているわけではない。保守性、可読性高いコードであるために適宜使い分けで適切な名前付けが出来ることは大切じゃな。
ケイタ
ケイタ
はい!少しずつ慣れていきます!
キヨシ
キヨシ
うむ^^ それでが次回はActiveRecordというgemを使って、DB(データベース)に連想配列(ハッシュ)にしたデータを突っ込んで保存してみるぞい^^
mysql_AR
ActiveRecord(gem)を使ってDB(MySQL)にデータを保存してみよう【Ruby】 ActiveRecord(gem)を使ってDB(MySQL)にデータを保存してみよう データベースを使うメリッ...

ABOUT ME
キヨシ
キヨシ
キヨシじゃよ^^ 30歳を超えてからエンジニアに転身。現在はリモートワークしながら海外と日本を行き来して自由気ままに暮らしておるよ( ^ω^ ) フォッフォッフォッ