LotosLabo

プログラミング技術とか気になった情報を載せていきます

Ruby言語について5

ハッシュ

配列と同じく複数のオブジェクトへの参照をまとめて管理することができるオブジェクト配列がインデックスを使って要素を区別していたのに対し、ハッシュではキーと呼ばれるものを使用。

連想配列とも呼ばれる
{キー1 => 値1, キー2 => 値2, ...]

例:

hash = {"Yamada" => 34, "Katou" => 28, "Endou" => 18}

キー    値
ーーーーーーー
Yamada   34
Katou    28
Endou   18

fetchメソッド

ハッシュオブジェクト.fetch(key[, default])

hash = {"Yamada" => 34, "Katou" => 28, "Endou" => 18}

print(hash["Katou"])
print(hash.fetch("Katou"))



28が出力される
しかしfetchのほうは要素が入ってない場合にエラーが出る

Hashクラス


Hash[key,value,...]


hash = Hash["Yamada", 34, "Katou", 28, "Endou", 18]

これは推奨できないので

Hash[key => value,...] を使う

hash = Hash["Yamada" => 34, "Katou" => 28, "Endou" => 18]


要素の追加と値の変更


ハッシュオブジェクト[キー] = オブジェクト

hash = {"Lemon" => 100, "Orange" => 150}
hash["Lemon"] = 120

hash = {"Lemon" => 100, "Orange" => 150}
hash["Banana"] = 90



この場合キー「Banana」はハッシュに存在していませんので、新しく要素として(キー, 値) = ("Banana", 90)が追加されます

storeメソッド

hash = {"Lemon" => 100, "Orange" => 150}
hash.store("Lemon", 120)
hash.store("Banana", 190)



上記ではキー「Lemon」に対する新しい値として「120」を代入し、また新しい要素として(キー, 値) = ("Banana", 190)をハッシュに追加します。

ハッシュのサイズ

ハッシュオブジェクト.length
ハッシュオブジェクト.size

hash = {"Lemon" => 100, "Orange" => 150}
print(hash.length)


繰り返し


オブジェクト.each{|key, value|
実行する処理1
実行する処理2
}

例:

hash = {"Lemon" => 100, "Orange" => 150}
hash.each{|key, value|
  print(key + "=>", value)
}



出力

Lemon=>100Orange=>150

ハッシュに含まれるキーや値を配列として取得


オブジェクト.keys

例:

hash = {"Lemon" => 100, "Orange" => 150}
array = hash.keys
print array



出力

["Lemon", "Orange"]


オブジェクト.values

例:

hash = {"Lemon" => 100, "Orange" => 150}
array = hash.values
print array



出力

[100, 150]