shift()
public
Removes a key-value pair from hsh and returns it as the two-item
array [ key, value ], or the hash’s default value if the hash is empty.
h = { 1 => "a", 2 => "b", 3 => "c" }
h.shift
h
Show source
static VALUE
rb_hash_shift(VALUE hash)
{
struct shift_var var;
rb_hash_modify(hash);
var.key = Qundef;
rb_hash_foreach(hash, RHASH(hash)->iter_lev > 0 ? shift_i_safe : shift_i,
(VALUE)&var);
if (var.key != Qundef) {
if (RHASH(hash)->iter_lev > 0) {
rb_hash_delete_key(hash, var.key);
}
return rb_assoc_new(var.key, var.val);
}
else if (FL_TEST(hash, HASH_PROC_DEFAULT)) {
return rb_funcall(RHASH_IFNONE(hash), id_yield, 2, hash, Qnil);
}
else {
return RHASH_IFNONE(hash);
}
}