Method: Array#select!
- Defined in:
- array.c
#select! {|item| ... } ⇒ Array? #select! ⇒ Enumerator
Invokes the given block passing in successive elements from self, deleting elements for which the block returns a false value.
If changes were made, it will return self, otherwise it returns nil.
See also Array#keep_if
If no block is given, an Enumerator is returned instead.
2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 |
# File 'array.c', line 2818
static VALUE
rb_ary_select_bang(VALUE ary)
{
long i1, i2;
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
rb_ary_modify(ary);
for (i1 = i2 = 0; i1 < RARRAY_LEN(ary); i1++) {
VALUE v = RARRAY_AREF(ary, i1);
if (!RTEST(rb_yield(v))) continue;
if (i1 != i2) {
rb_ary_store(ary, i2, v);
}
i2++;
}
if (i1 == i2) return Qnil;
if (i2 < i1)
ARY_SET_LEN(ary, i2);
return ary;
}
|