要素の順序性がある場合に使う配列と、順序性がない場合に使うハッシュ。
Rubyのハッシュの言語仕様について。
基本的な書き方
PHPと同じようにキーとして文字列を使う場合は以下の通り。
1 2 3 4 |
a = {"hoge1" => 100, "hgoe2" => 200, "hoge3" => 300} a["hoge1"] # 100 a["hoge2"] # 200 a["hoge4"] # nil |
キーとしてシンボルを使う場合は以下の通り。Rubyっぽくなる。
Ruby1.9以降はこちらを使う。
1 2 3 4 |
b = {:hoge1 => 100, :hoge2 => 200, :hoge3 => 300} b[:hoge1] # 100 b[:hoge2] # 200 b[:hoge4] # nil |
Hash.new()による生成
Hash.new()により配列の初期値として新たに確保した変数を設定できる。
Array.new()と同様に、全ての要素として同じオブジェクトを設定する。
1 2 3 4 5 |
a = Hash.new(100) a[:hoge1] # 100 a[:hoge1].object_id # 12345 a[:hoge2] # 100 a[:hoge2].object_id # 12345 |
[]による生成
面倒くさいことに、キーと値が交互に現れる配列からハッシュを生成できる。
その書き方は以下の通り。
1 2 |
a = Hash[:hoge1, 100, :hoge2, 200, :hoge3, 300] # [:hoge1=>100,:hoge2=>200,:hoge3=>300] b = [[:hoge1,100],[:hoge2,200],[:hoge3,300]].to_h # [:hoge1=>100,:hoge2=>200,:hoge3=>300] |
関数の引数、波カッコの省略
関数にハッシュを引数として与える場合、ハッシュを構成する波カッコを省略できる。
というか、引数の数が合わなかったときに末尾の処理の一つである様子。
ハッシュ引数の波カッコの種略を引数の先頭にもってくると(末尾の引数でないと)、例外が発生する。
1 2 3 4 5 6 7 |
def func a, b, c c end func 100,200,:hoge1=>300,:hoge2=>400 # {:hoge1=>300,:hoge2=>400} func :hoge1=>100,:hoge2=>200,300,400 func :hoge1=>100,:hoge2=>200,300,400 # 例外 |
キーワード引数
Rubyっぽい書き方。キーワード引数。
キーワードにシンボルで名前をつけることができる。関数を呼び出す時の可読性が向上する。
1 2 3 4 |
def func hoge1:, hoge2:, hoge3 hoge1 + hoge2 + hoge3 end func 100,200,300 # 600 |