ハッシュは配列に似ています。配列とちがうところは、値の取り出し方です。
配列では0から始まる数字を使って値を取得していました。ハッシュでは予め値に
名前(キー)を付けておき、そのキーで値を取り出します。
ハッシュ名 = {キー1 => 値1, キー2 => 値2}
ハッシュの作成。「キー1、値1」と「キー2、値2」の組み合わせの値が入ったハッシュが出来ます。
ハッシュ名[キー2] = 100
値2の部分に100が設定されます。
変数 = ハッシュ名[キー2]
変数に100が代入されます。
簡単なくじ引きプログラムを作ります。
kuzi = {0 => "一等、ハワイ旅行",5 => "二等、液晶テレビ",7 => "三等、商品券"}
a = rand(8)
print(kuzi[a],"\n")
キー(名前)に0、5、7の数字を使用してます。
「a = rand(8)」で0から7までの数字を作成。ハッシュから値を取得するのに使用。
このプログラム実行すると、時々「nil」と表示されます。
これは指定したキーに値が無かったり、キーその物がハッシュにない時に表示されます。
この「nil」と「if」文を使ってハズレを表示します。
kuzi = {0 => "一等、ハワイ旅行",5 => "二等、液晶テレビ",7 => "三等、商品券"}
a = rand(8)
if kuzi[a] == nil then
print("はずれです。もう一度引いてください","\n")
else
print(kuzi[a],"\n")
end
最後にハッシュを使って前回のシーザー暗号プログラムを書き換えます。
#シーザー暗号 ハッシュ
table = {"a"=>0,"b"=>1,"c"=>2,"d"=>3,"e"=>4,
"f"=>5,"g"=>6,"h"=>7,"i"=>8,"j"=>9,"k"=>10,
"l"=>11,"m"=>12,"n"=>13,"o"=>14,"p"=>15,
"q"=>16,"r"=>17,"s"=>18,"t"=>19,"u"=>20,
"v"=>21,"w"=>22,"x"=>23,"y"=>24,"z"=>25,
" "=>26}
key = 3
a = "I love Ruby"
a = a.downcase
i = a.length
encryption = '暗号化した文='
for x in 0..(i-1) do
suzi = table[a[x].chr]
crypt = (suzi + key) % 27#keyの値だけ数字をシフト
encryption += table.index(crypt)
end
puts encryption
21行目ではハッシュに平文の各文字をキーとして指定し、値を取得してます。
25行目ではハッシュに値を指定し、対応するキーを取得してます。
「table.index(crypt)」の「index()」についてはリファレンスを参照してください。
前回のプログラムに比べると「while」文が無くなって処理の流れがスッキリして分かりやすくなったと思います。
最近のコメント