Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Hashクラス > merge!

instance method Hash#merge!

merge!(other) -> self[permalink][rdoc]
merge!(other) {|key, self_val, other_val| ... } -> self
update(other) -> self
update(other) {|key, self_val, other_val| ... } -> self

selfとotherのハッシュの内容をマージ(統合)します。

デフォルト値はselfの設定のままです。

self と other に同じキーがあった場合はブロック付きか否かで 判定方法が違います。ブロック付きのときはブロックを呼び出して その返す値を重複キーに対応する値にします。ブロック付きでない 場合は常に other の値を使います。

otherがハッシュではない場合、otherのメソッドto_hashを使って暗黙の変換を試みます。

[PARAM] other:
マージ用のハッシュまたはメソッド to_hash でハッシュに変換できるオブジェクトです。
[RETURN]
マージ後のselfを返します。

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge!(h2)   # => {"a"=>100, "b"=>254, "c"=>300}
h1              # => {"a"=>100, "b"=>254, "c"=>300}

foo = {1 => 'a', 2 => 'b', 3 => 'c'}
bar = {2 => 'B', 3 => 'C', 4 => 'D'}

p foo.update(bar) #=> {1=>"a", 2=>"B", 3=>"C", 4=>"D"}
p foo  #=> {1=>"a", 2=>"B", 3=>"C", 4=>"D"}

p foo.update(bar) {|key, foo_val, bar_val| foo_val + bar_val } # => {1=>"a", 2=>"BB", 3=>"CC", 4=>"DD"}
p foo  # => {1=>"a", 2=>"BB", 3=>"CC", 4=>"DD"}

[SEE_ALSO] Hash#merge!