Method: Hash#update

Defined in:
hash.c

#merge!(other_hash1, other_hash2, ...) ⇒ Hash #update(other_hash1, other_hash2, ...) ⇒ Hash #merge!(other_hash1, other_hash2, ...) {|key, oldval, newval| ... } ⇒ Object #-Object #update(other_hash1, other_hash2, ...) {|key, oldval, newval| ... } ⇒ Object #-Object

Adds the contents of the given hashes to the receiver.

If no block is given, entries with duplicate keys are overwritten with the values from each other_hash successively, otherwise the value for each duplicate key is determined by calling the block with the key, its value in the receiver and its value in each other_hash.

h1 = { "a" => 100, "b" => 200 }
h1.merge!          #=> {"a"=>100, "b"=>200}
h1                 #=> {"a"=>100, "b"=>200}

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

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 246, "c" => 300 }
h3 = { "b" => 357, "d" => 400 }
h1.merge!(h2, h3)
                   #=> {"a"=>100, "b"=>357, "c"=>300, "d"=>400}
h1                 #=> {"a"=>100, "b"=>357, "c"=>300, "d"=>400}

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 246, "c" => 300 }
h3 = { "b" => 357, "d" => 400 }
h1.merge!(h2, h3) {|key, v1, v2| v1 }
                   #=> {"a"=>100, "b"=>200, "c"=>300, "d"=>400}
h1                 #=> {"a"=>100, "b"=>200, "c"=>300, "d"=>400}

Hash#update is an alias for Hash#merge!.

Overloads:

  • #merge!(other_hash1, other_hash2, ...) ⇒ Hash

    Returns:

  • #update(other_hash1, other_hash2, ...) ⇒ Hash

    Returns:

  • #merge!(other_hash1, other_hash2, ...) {|key, oldval, newval| ... } ⇒ Object

    Yields:

    • (key, oldval, newval)
  • #update(other_hash1, other_hash2, ...) {|key, oldval, newval| ... } ⇒ Object

    Yields:

    • (key, oldval, newval)


3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
# File 'hash.c', line 3794

static VALUE
rb_hash_update(int argc, VALUE *argv, VALUE self)
{
    int i;
    bool block_given = rb_block_given_p();

    rb_hash_modify(self);
    for (i = 0; i < argc; i++){
       VALUE hash = to_hash(argv[i]);
       if (block_given) {
           rb_hash_foreach(hash, rb_hash_update_block_i, self);
       }
       else {
           rb_hash_foreach(hash, rb_hash_update_i, self);
       }
    }
    return self;
}