Method: Array#partition
- Defined in:
- ext/rmtools.cpp
#partition {|obj| ... } ⇒ Array
Same as Enumerable#partition, but twice faster
[5, 6, 1, 2, 4, 3].partition {|i| (i&1).zero?} #=> [[2, 4, 6], [1, 3, 5]]
308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
# File 'ext/rmtools.cpp', line 308
static VALUE rb_ary_partition(VALUE ary)
{
VALUE select, reject;
long i, len;
RETURN_ENUMERATOR(ary, 0, 0);
len = RARRAY_LEN(ary);
select = rb_ary_new2(len);
reject = rb_ary_new2(len);
for (i = 0; i < len; i++)
rb_ary_push((RTEST(rb_yield(RARRAY_PTR(ary)[i])) ? select : reject), RARRAY_PTR(ary)[i]);
return rb_assoc_new(select, reject);
}
|