1年くらい前にRubyの勉強のためにHashクラスの便利メソッドをまとめたもの
参考
・パーフェクトRuby
・https://docs.ruby-lang.org/ja/latest/class/Hash.html
繰り返し
each_key
ハッシュのキーだけを繰り返す
each_value
ハッシュの値だけを繰り返す
hash = { ruby: 1, java: 2}
hash.each_key{ |key| puts key} # => "ruby" "java" と順番に出力
hash.each_value{ |val| puts val} # => "1" "2" と順番に出力
マージ
2つのハッシュを1つにまとめる
a = { ruby: 1, java: 2}
b = { php: 3, ruby: 5}
a.merge(b) # => {:ruby=>5, :java=>2, :php=>3}
キーと値の入れ替え
invert
キーと値を入れ替えた新しいハッシュを生成
hash = { ruby: 1, java: 2}
hash.invert # => {1=>:ruby, 2=>:java}
キーや値の確認
has_key?
指定したキーが存在するか確認(値がnilか区別を付けるため)
hash = {hoge: nil}
hash[:unknown] # => nil
hash[:hoge] # => nil
hash.has_key?(:unknown) # => false
hash.has_key?(:hoge) # => true
has_value?
指定した値を持つエントリが存在するか確認
hash = {ruby: 1}
hash.has_value?(1) # => true
hash.has_value?(2) # => false
デフォルト値の設定
Hah.newの第一引数にデフォルト値を指定できる
hash = Hash.new('ruby')
hash[:a] # => "ruby"
hash = Hash.new { |v| 'java'}
hash[:b] # => "java"
fetch
指定したキーに値が存在しない場合の戻り値を指定
hash = {ruby: 1}
hash.fetch(:ruby, 5) # => 1
hash.fetch(:java, 5) # => 5
hash.fetch(:java) {|key| key} # => :java