はじめに
rubyのhashに対するメソッドで、普段あまり使わないメソッドをまとめてみました。
compact
valueがnilのものを取り除きます。
user = { id: 1, name: nil }
user.compact
# => {:id=>1}
dig
valueにhashがある場合に、その値を取得する
user = { user: { id: 1 } }
# => {:user=>{:id=>1}}
user.dig(:user, :id)
# => 1
equal
同じオブジェクトの場合にtrueを返す
h1 = {}
h2 = {}
h1.equal?(h2)
# => false
h1.equal?(h1)
# => true
invert
keyとvalueを入れ替える
h = { id: 1 }
# => {:id=>1}
h.invert
# => {1=>:id}
assoc
keyの検索を行い、無い場合はnil、あった場合はkeyとvalueの配列を返す
h = { id: 1, name: 'bob', age: 12 }
h.assoc(:id)
# => [:id, 1]
rassoc
valueの検索を行い、無い場合はnil、あった場合はkeyとvalueの配列を返す
h = { name: 'bob', age: 12 }
# => {:name=>"bob", :age=>12}
h.rassoc('bob')
# => [:name, "bob"]
replace
対象のhashを別のhashの内容に置き換える
h1 = { id: 1 }
h2 = { id: 2 }
h1.replace(h2)
# => {:id=>2}
h1
# => {:id=>2}
slice
対象のkeyのみを取り出す
h1 = { id: 1, name: 'bob', age: 12 }
h1.slice(:id)
# => {:id=>1}
store
hashにkeyとvalueを設定する
h = {}
h.store(:id, 1)
h
# => {:id=>1}
transform_keys
それぞれのkeyの値を書き換える
h = { id: 1, name: 'bob', age: 12 }
h.transform_keys(&:to_s)
# => {"id"=>1, "name"=>"bob", "age"=>12}
transform_values
それぞれのvalueの値を書き換える
h = { id: 1, name: 'bob', age: 12 }
h.transform_values(&:to_s)
# => {:id=>"1", :name=>"bob", :age=>"12"}