LoginSignup
1
1

More than 3 years have passed since last update.

はじめに

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"}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1