Method: Array#delete
- Defined in:
- array.c
#delete(object) ⇒ Object #delete(object) {|element| ... } ⇒ Object
Removes zero or more elements from self
.
With no block given, removes from self
each element ele
such that ele == object
; returns the last removed element:
a = [0, 1, 2, 2.0]
a.delete(2) # => 2.0
a # => [0, 1]
Returns nil
if no elements removed:
a.delete(2) # => nil
With a block given, removes from self
each element ele
such that ele == object
.
If any such elements are found, ignores the block and returns the last removed element:
a = [0, 1, 2, 2.0]
a.delete(2) {|element| fail 'Cannot happen' } # => 2.0
a # => [0, 1]
If no such element is found, returns the block’s return value:
a.delete(2) {|element| "Element #{element} not found." }
# => "Element 2 not found."
Related: see Methods for Deleting.
4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 |
# File 'array.c', line 4047
VALUE
rb_ary_delete(VALUE ary, VALUE item)
{
VALUE v = item;
long i1, i2;
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
VALUE e = RARRAY_AREF(ary, i1);
if (rb_equal(e, item)) {
v = e;
continue;
}
if (i1 != i2) {
rb_ary_store(ary, i2, e);
}
i2++;
}
if (RARRAY_LEN(ary) == i2) {
if (rb_block_given_p()) {
return rb_yield(item);
}
return Qnil;
}
ary_resize_smaller(ary, i2);
ary_verify(ary);
return v;
}
|