ruby ハッシュ操作

本稿について

本稿はサイト運営者が学んだことなどを記したメモの内容です。
全てが正確な情報とは限りません。ご注意ください。また修正するべき点は適時修正していきます
ハッシュの空の要素にデフォルトで0を入れる
hash = Hash.new(0)

[参考]


ハッシュをリテラルと文字列、両方で判定できるようにする
hash = { id: 1, hoge: ‘fuga’ }.with_indifferent_access
=> {"id"=>1, "hoge"=>"fuga"}
hash[:id]
=> 1
hash['id']
=> 1
hash['hoge']
=> "fuga"
hash[:hoge]
=> "fuga"


Hashのkeyを文字列からシンボルに変換する
hash = { ‘item' => ‘hoge' }.symbolize_keys
=> {:item=>"hoge"}

Hashの結合
hash1 = { hoge: 1 }
=> {:hoge=>1}
hash2 = { fuga: 2 }
=> {:fuga=>2}
hash1.merge(hash2)
=> {:hoge=>1, :fuga=>2}

同じデータがある場合には上書きされる
hash1 = { hoge: 1, fuga: 2 }
=> {:hoge=>1, :fuga=>2}
hash2 = { hoge:3 }
=> {:hoge=>3}
hash1.merge(hash2)
=> {:hoge=>3, :fuga=>2}


Hashのvalueで最大値を返す
hash.max_by { |key, val| val }

複数取得したい場合
hash.max_by(3) { |key, val| val }

深い階層のデータを一括で取得する(ruby 2.3以上)
hash = { "1" => { code: 'hoge' } }
=> {"1"=>{:code=>"hoge"}}
hash["1"]
=> {:code=>"hoge"}
hash.dig("1", :code)
=> "hoge"
hash.dig("1", :nun)
=> nil

[参考]

深い階層のデータを追加する
hash.update("hoge" => { "fuga" => true })

[参考]


keyの削除

hash = { one: 1, two: 2 }
hash.delete(:one)
hash
=> { two: 2 }


sort

keyでsort
hash = { 'a' => 3, 'b' => 1, 'c' => 5}
Hash[ hash.sort ]
=> {"a"=>3, "b"=>1, "c"=>5}

[参考]
Back