search
LoginSignup
1

More than 1 year has passed since last update.

Organization

RubyのHashに対するメソッドまとめ

はじめに

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

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
What you can do with signing up
1