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