LoginSignup
1
0

More than 1 year has passed since last update.

ハッシュと配列は何が違うのか

Last updated at Posted at 2023-04-12

はじめに

最近Rubyの勉強をしていて、変数をまとめたりする際にハッシュや配列が出てきたんですが、そもそもこの2つがどういうものなのか、またどういう時に使い分けるのかなど明確に説明できなさそうなので、思い切って本記事にまとめてみました!
言葉足りずわかりにくい点も多々あると思いますが、どこかのプログラミング初学者の助けに少しでもなれれば幸いです🙏

わかりやすく説明するためにテストの点数を例として以下のような変数を準備しました。

japanese = 50
math = 40
science = 90
english = 80
infomation = 70

また、通常5教科の平均を出そうとすると以下のようなコードになります。

puts (japanese + math + science + english + infomation) / 5 

しかし、これでは毎回教科の名前を記載しなければならず大変です。
そこでハッシュや配列を使うことでどれくらい簡略化できるのかをそれぞれの特徴を書きつつまとめていきます。

配列とは

配列とは、複数のデータをまとめてか格納することができるオブジェクトのこと。
例で用いた変数を配列にまとめると以下のようになります。

scores = [50, 40, 90, 80, 70]

大分まとまって見やすくなりました。
また、平均を出すコードは以下のようになります。

puts (scores[0] + scores[1] + scores[2] + scores[3] + scores[4]) / 5

ここで、ん?と思った方いると思います。
そうなんですよ!!配列は0番目からカウントされるんですよ!
なので、変数scoresの1番目(数え方は0番目)に格納されているものを取り出そうとすると以下のようになります。

scores[0] => 50

これらのことから、配列を用いることで変数だと複数の行にまたがってしまったものをコンパクトにできるというメリットがあることがわかりました!

簡単にまとめると定義は[ ]で、要素を「順番」で管理するということです。

しかし、これではコンパクトにしたせいでどの教科が何点なのかがわかりづらくなってしまいました・・・
そこで活躍するのがハッシュになります!

ハッシュとは

ハッシュとは、キーと値の組み合わせでデータを管理するオブジェクトのこと。
例で用いた変数をハッシュにまとめると以下のようになります。

scores_hash = {"japanese" => 50, "math" => 40, "science" => 90 ,"english" => 80, "infomation" => 70 }

上記の場合"japanese"キーで、50もしくはバリューになっています。
配列にまとめた時よりも各教科と点数の対応がわかりやすくなりました。

また、平均を出すコードは以下になります。

puts {scores_hash["japanese"] + scores_hash["math"] + scores_hash["science"] + scores_hash["english"] + scores_hash["infomation"] }

少し横に長くなってしまいましたが、なんの教科の平均を求めようとしているのかが視覚的にも分かりますね。

簡単にまとめると定義は{ }で、要素を「名前」で管理するということです。

まとめ

・配列が要素を指定するのに「0」から始まるインデックスを使用する。
・ハッシュはインデックスに「キー」と呼ばれる任意の文字列を指定して「値(バリュー)」と呼ばれる要素を指定する。

最後に

Rubyを学習する上で避けて通ることのできないハッシュ配列
自分の中でも思いの外まとまっておらず、記事を書くことで少し整理された気がします。
独学でやっているとどうしてもインプットの作業が増えてしまうので、たまに振り返りも込めて記事の方を更新していけたらなと・・・
それではまた👋

1
0
1

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