Rubyでハッシュ

今日はハッシュの勉強しました。これ、しっくりこないことが多かったです。

ハッシュ
データ管理用のデータ。要素の参照にキーを設定する。

キーを初期化しておく方法
ハッシュの書き方は2通りあります。

STONE = {}
STONE["January"]= "ガーネット"

あらかじめキーと値を設定しておく方法

STONE = { 
"January" = > "ガーネット"
}

ハッシュリテラルでは"=>"でキーと値をつなぐ。

ハッシュの応用的な使い方
ある値がプログラム内で登録されているかチェックする。つまり、チェック対象の値をキーとする。これを使ってじゃんけんするプログラムを写経した。

...(パーは0、チョキは1、グーは2 を定義)...

  4 WIN = {
  5     [PAPER, STONE] => true,
  6     [SCISORS, PAPER] => true,
  7     [STONE, SCISORS] => true,
  8 }

...(playerに手を決めてもらう。computerの手はランダム)...

 15 if player == computer
 16     puts("あいこです")
 17 else
 18     if WIN[[player, computer]]
 19         puts("あなたの勝ちです]")
 20     else
 21         puts("あなたの負けです")
 22     end
 23 end

line18が謎でした。一番外にあるはハッシュキーを指定するため。内側のが配列になります。
キーにはなんでも使えるので、この場合はキーが配列になっているのはわかります。が、この配列は何処から来たのか・・・。何処で定義したのだろうか・・・。


さあ、解読です。
line18は意味不明です。WIN[ キー ]となっているから、line4〜8のハッシュを使っています。
ここで、思い出すのはハッシュリテラルの書き方

key => value

つまり、

  4 WIN = {
  5     [PAPER, STONE] => true,
  6     [SCISORS, PAPER] => true,
  7     [STONE, SCISORS] => true,
  8 }

[PAPER, STONE]、[SCISORS, PAPER]、[STONE, SCISORS]は配列なのです。
ここで注意。Ruby特有の書き方で、[]で囲むだけで配列としてくれます。phpだとarray()で書かないとダメなんですが、rubyはこれだけでOK!
便利です。配列を書くの楽ですね。この書き方が特有すぎて、教えてもらうまで気づきませんでした。他の言語知っている方だと、同じことが気になるようです。このレビューした時は皆ホットでした。