hashの格納順番

ハッシュ表を作る際、配列を使って実装した。

HASH_SIZE = 11
TABLE = Array.new(HASH_SIZE)

def set(key,val)
  #ハッシュをして、ハッシュ表にデータを格納
end

set("hello","world")
set("今日は","赤ちゃん")
set("竹やぶ","焼けた")
set("テレビ","ラジオ")
set("ruby","red")
set("sapphire","blue")
set("121","11")
set("富士","オーム")
set("","見頃")

これを実行すると

[["hello", "world"],
 ["ruby", "red"],
 ["121", "11"],
 ["人", "見頃"],
 ["今日は", "赤ちゃん"],
 ["富士", "オーム"],
 ["竹やぶ", "焼けた"],
 ["テレビ", "ラジオ"],
 ["sapphire", "blue"]]

設定順通りにはデータが格納されていない。


今まで使っていたhashだと

table = {}
table["hello"] ="world"
table["今日は"] ="赤ちゃん"
table["竹やぶ"] ="焼けた"
table["テレビ"] ="ラジオ"
table["ruby"] ="red"
table["sapphire"] ="blue"
table["121"] ="11"
table["富士"] ="オーム"
table[""] ="見頃"

実行すると

{"hello"=>"world",
 "今日は"=>"赤ちゃん",
 "竹やぶ"=>"焼けた",
 "テレビ"=>"ラジオ",
 "ruby"=>"red",
 "sapphire"=>"blue",
 "121"=>"11",
 "富士"=>"オーム",
 ""=>"見頃"}

となり、設定順に格納されている。キーを基にハッシュ関数に書けると設定順にはならないので、別の配列などで順番を保持するものを作っておくこと。