rehash()
public
Rebuilds the hash based on the current hash values for
each key. If values of key objects have changed since they
were inserted, this method will reindex hsh. If Hash#rehash is called while an iterator is
traversing the hash, an IndexError will be
raised in the iterator.
a = [ "a", "b" ]
c = [ "c", "d" ]
h = { a => 100, c => 300 }
h[a]
a[0] = "z"
h[a]
h.rehash
h[a]
Show source
/*
* call-seq:
* hsh.rehash -> hsh
*
* Rebuilds the hash based on the current hash values for each key. If
* values of key objects have changed since they were inserted, this
* method will reindex <i>hsh</i>. If <code>Hash
* called while an iterator is traversing the hash, an
* <code>IndexError</code> will be raised in the iterator.
*
* a = [ "a", "b" ]
* c = [ "c", "d" ]
* h = { a => 100, c => 300 }
* h[a] #=> 100
* a[0] = "z"
* h[a] #=> nil
* h.rehash #=> {["z", "b"]=>100, ["c", "d"]=>300}
* h[a] #=> 100
*/
static VALUE
rb_hash_rehash(hash)
VALUE hash;
{
st_table *tbl;
rb_hash_modify(hash);
tbl = st_init_table_with_size(&objhash, RHASH(hash)->tbl->num_entries);
rb_hash_foreach(hash, rb_hash_rehash_i, (st_data_t)tbl);
st_free_table(RHASH(hash)->tbl);
RHASH(hash)->tbl = tbl;
return hash;
}