ハッシュで使用頻度の高いメソッド
keysメソッド
ハッシュのキーを配列として返すメソッド
keyメソッド
languages = { japan: 'Japanese', us: 'English', india: 'Hindi' }
languages.keys #=>[:japan, :us, :india]
valuesメソッド
ハッシュの値を配列として返すメソッド
valuesメソッド
languages = { japan: 'Japanese', us: 'English', india: 'Hindi' }
languages.values #=> ["Japanese", "Enlgish", "Hindi"]
has_key?メソッド
ハッシュの中に指定されたキーが存在するかどうか確認するメソッド
※エイリアスメソッドとして、key?, include?, member? があります。
has_key?
languages = { japan: 'Japanese', us: 'English', india: 'Hindi' }
languages.has_key?(:japan) #=> true
languages.has_key?(:italy) #=> false
**でハッシュを展開
**をハッシュの前に付けるとハッシュリテラル内でほかのハッシュのキーと値を展開できる
**
h = { us: 'English', india: 'Hindi' }
{ japan: 'Japanese', **h } #=> {japan: 'Japanese', us: 'English', india: 'Hindi'}
#mergeメソッドを使っても同じ効果が得られる
{ japan: 'Japanese'}.merge(h) #=> {japan: 'Japanese', us: 'English', india: 'Hindi'}
配列とハッシュ
to_aメソッド
ハッシュをto_aメソッドを使って配列に変換するメソッド
to_a
languages = { japan: 'Japanese', us: 'English', india: 'Hindi' }
languages.to_a #=> [[:japan, "Japanese"], [:us, "English"], [:india, "Hindi"]]
to_hメソッド
配列をハッシュに変換することができるメソッド
to_h
array = [[:japan, "Japanese"], [:us, "English"], [:india, "Hindi"]]
array.to_h #=> {:japan=>"Japanese", :us=>"English", :india=>"Hindi"}
#ハッシュとして解析不能な配列に対してto_hメソッドを呼ぶとエラーになる
array = [5, 6, 7, 8]
array.to_h #=> TypeError: wrong element type Integer at 0 (expected array)
#キーが重複したりすると思いがけないエラーになる
array = [[:japan, "Japanese"], [:japan, "日本語"]]
array.to_h #=> {:japan=>"日本語"}
Hash[]に対して渡すことで配列に変換することもできる
Hash[]
array = [[:japan, "Japanese"], [:us, "English"], [:india, "Hindi"]]
Hash[array] #=> {:japan=>"Japanese", :us=>"English", :india=>"Hindi"}
ハッシュの初期値
h = Hash.new('OK')
a = h[:aaa] #=> "ok"
b = h[:bbb] #=> "ok"
#変数aと変数bは同一オブジェクト
a.equal?(b) #=> true
#変数aに破壊的な変更をすると、変数bの値も一緒に変わってしまう
a.upcase!
a #=> "OK"
b #=> "OK"
ブロックを使う
h = Hash.new{'OK'}
a = h[:aaa] #=> "ok"
b = h[:bbb] #=> "ok"
#変数aと変数bは異なるオブジェクト
a.equal?(b) #=> false
#変数aに破壊的な変更を適用しても、変数bの値は変わらない
a.upcase!
a #=> "OK"
b #=> "ok"
参考文献
プロを目指す人のためのRuby入門