<=>(p1)
public
Comparison—Returns an integer (-1, 0, or +1) if this array is less
than, equal to, or greater than other_array. Each object in each array is compared (using <=>). If
any value isn’t equal, then that inequality is the return value. If
all the values found are equal, then the return is based on a comparison of
the array lengths. Thus, two arrays are ``equal’‘ according to
Array#<=> if and only if they
have the same length and the value of each element is equal to the value of the
corresponding element in the other array.
[ "a", "a", "c" ] <=> [ "a", "b", "c" ]
[ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ]
Show source
/*
* call-seq:
* array <=> other_array -> -1, 0, +1
*
* Comparison---Returns an integer (-1, 0,
* or +1) if this array is less than, equal to, or greater than
* other_array. Each object in each array is compared
* (using <=>). If any value isn't
* equal, then that inequality is the return value. If all the
* values found are equal, then the return is based on a
* comparison of the array lengths. Thus, two arrays are
* ``equal'' according to <code>Array#<=></code> if and only if they have
* the same length and the value of each element is equal to the
* value of the corresponding element in the other array.
*
* [ "a", "a", "c" ] <=> [ "a", "b", "c" ]
* [ 1, 2, 3, 4, 5, 6 ] <=> [ 1, 2 ]
*
*/
VALUE
rb_ary_cmp(ary1, ary2)
VALUE ary1, ary2;
{
long len;
VALUE v;
ary2 = to_ary(ary2);
if (ary1 == ary2) return INT2FIX(0);
if (rb_inspecting_p(ary1)) return INT2FIX(0);
v = rb_protect_inspect(recursive_cmp, ary1, ary2);
if (v != Qundef) return v;
len = RARRAY(ary1)->len - RARRAY(ary2)->len;
if (len == 0) return INT2FIX(0);
if (len > 0) return INT2FIX(1);
return INT2FIX(-1);
}