連想配列(ハッシュ)
key(ラベル)とvalue(key)を使って、よりもわかりやすくした配列をハッシュと言います。
普通の配列だと
japanese = 60
english = 40
science = 30
history = 70
math = 40
#平均点
puts (60 + 40 + 30 + 70 + 40)/5
# もしくは
puts (japanese + english + science + history + math)/5
しかしここで問題があります。
scores = [60,40,30,70,40]
puts (scores[0] + scores[1] + scores[2] + scores[3] + scores[4])/5
これだけ見て何のスコアかわかるでしょうか。
そこでハッシュ
が登場します。
scores = {"japanese"=>60,"english"=> 40,"science"=> 30,"history"=>70,"math"=>40}
これだとさっきよりわかりやすいですよね。
scores = {"japanese"=>60,"english"=> 40,"science"=> 30,"history"=>70,"math"=>40}
puts scores["japanese"]
で実行し60と出力されます。
平均点を出すと
scores = {"japanese"=>60,"english"=> 40,"science"=> 30,"history"=>70,"math"=>40}
puts (scores["japanese"] + scores["english"] + scores["science"] + scores["history"] + scores["math"]/5
で実行すると48となります。
別の書き方にすると
scores = {japanese: 60,english: 40}
puts scores[:japanese]
でも60はとり出せます。
そして順番を気にせず取り出せます。
ハッシュは文字列とシンボルで取り出す方法の2つがあります。
シンボルはシンボル、ハッシュはハッシュで合わせる必要があります。
もう少しハッシュを使う
ハッシュを使って5教科の平均点を見てみましょう。
scores = {"japanese" => 80, "english" => 80, "science" => 50, "history" => 60, "math" => 70}
puts (scores["japanese"] + scores["english"] + scores["science"] + scores["history"] + scores["math"])/5
出力すると
68
このように変数と配列を組み合わせて何をやっているのかをわかりやすくしたのがハッシュです。
ちなみに科目の部分がkeyで点数がvalueです。
他にもwebサービスだと下のようにすることがよくあるみたいです。
user = {"name" => "taro","email"=> "taro@example.com","job" => "programmer"}
puts user["name"]
taro
と出力。
ハッシュの使い方(シンボル)
上記は文字列で指定(""をつけると文字列)でしたがコロンがつく形式のシンボルにすると
下のようになります。
文字列にしない場合はシンボル(:)で指定
car number = {honda: 8410, toyota: 2089,history: 1207}
puts car number[:honda]
出力すると
8410
:(シンボル)で指定すると文字列にしなくてもできます。
参考記事