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!
便利です。配列を書くの楽ですね。この書き方が特有すぎて、教えてもらうまで気づきませんでした。他の言語知っている方だと、同じことが気になるようです。このレビューした時は皆ホットでした。