public Method

Array.-(p1)

array - other_array     an_array

Array Difference—Returns a new array that is a copy of the original array, removing any items that also appear in other_array. (If you need set-like behavior, see the library class Set.)

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=>  [ 3, 3, 5 ]

Source Code

/* 
*  call-seq:
*     array - other_array    -> an_array
*
*  Array Difference---Returns a new array that is a copy of
*  the original array, removing any items that also appear in
*  other_array. (If you need set-like behavior, see the
*  library class Set.)
*
*     [ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=>  [ 3, 3, 5 ]
*/

static VALUE
rb_ary_diff(ary1, ary2)
   VALUE ary1, ary2;
{
   VALUE ary3;
   volatile VALUE hash;
   long i;

   hash = ary_make_hash(to_ary(ary2), 0);
   ary3 = rb_ary_new();

   for (i=0; i<RARRAY(ary1)->len; i++) {
       if (st_lookup(RHASH(hash)->tbl, RARRAY(ary1)->ptr[i], 0)) continue;
       rb_ary_push(ary3, rb_ary_elt(ary1, i));
   }
   return ary3;
}
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.