Ruby 2.2.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Hashクラス > merge
merge(other) -> Hash
[permalink][rdoc]merge(other) {|key, self_val, other_val| ... } -> Hash
merge!(other) -> self
merge!(other) {|key, self_val, other_val| ... } -> self
selfとotherのハッシュの内容をマージ(統合)した結果を返します。デフォルト値はselfの設定のままです。
self と other に同じキーがあった場合はブロック付きか否かで 判定方法が違います。ブロック付きのときはブロックを呼び出して その返す値を重複キーに対応する値にします。ブロック付きでない 場合は常に other の値を使います。
Hash#merge! は、マージの結果でselfを変更する破壊的メソッドで、Hash#update の別名です。
otherがハッシュではない場合、otherのメソッドto_hashを使って暗黙の変換を試みます。
foo = {1 => 'a', 2 => 'b', 3 => 'c'} bar = {2 => 'B', 3 => 'C', 4 => 'D'} p foo.merge(bar) #=> {1=>"a", 2=>"B", 3=>"C", 4=>"D"} p foo #=> {1=>"a", 2=>"b", 3=>"c"} p foo.merge!(bar) {|key, foo_val, bar_val| foo_val + bar_val } #=> {1=>"a", 2=>"bB", 3=>"cC", 4=>"D"} p foo #=> {1=>"a", 2=>"bB", 3=>"cC", 4=>"D"} class Foo def to_hash {:Australia => 'Sydney', :France => 'Paris' } end end h = {:Germany => 'Berlin', :Australia => 'Canberra', :France => 'Paris' } h.merge!(Foo.new) #暗黙の変換 p h #=> {:Germany=>"Berlin", :Australia=>"Sydney", :France=>"Paris"}
[SEE_ALSO] Hash#update,Hash#replace