ハッシュは配列に似ています。配列とちがうところは、値の取り出し方です。
配列では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」文が無くなって処理の流れがスッキリして分かりやすくなったと思います。

2019年6月
« 4月    
 1
2345678
9101112131415
16171819202122
23242526272829
30  

カテゴリー

広告

現在の住まい、将来はVPSへ引越します。 ロリポップの上位版です。

広告

広告

最近のコメント

    広告

    Railsを動かす予定のVPS。無料キャンペーン中。

    広告