arrcmp - lexicographical comparison of two arrays
arr0.arrcmp(
arr1)
The arrcmp method compares two arrays lexicographically
(L-compare). It is conceptually similar to C/C++
strcmp()
. Two arrays are L-identical if
their shapes are identical and every element
of both arrays is equivalent.
To define the L-less and L-greater relationships, the elements are considered to have significance. In a vector, elements closer to the beginning have higher significance than elements farther from the beginning. So, the result of the L-comparison depends on the most-significant elemement n of arr0 that is not identical to the corresponding element of arr1. If arr0[n] is less than arr1[n] then arr0 is L-less than arr1. Otherwise it is L-greater.
For multi-dimensional arrays, the concept of significance is applied recursively. For example, with 2-dimensonal arrays, each row is L-compared and the most- significant row which is not equivalent determines whether arr0 is L-less than arr1 or L-greater.
If the shapes of the two arrays are not identical, the smaller dimension in each axis is conceptually extended with appropriate zeros.
Type conversion is applied to numeric types.
Returns 0 if arr0 and arr1 are L-identical
Returns -1 if arr0 is L-less than arr1
Returns 1 if arr0 is L-greater than arr1
TypeCheck
if either arr0 or arr1
is not comparable
a = [1,2,3] b = [1,2,4] a.arrcmp(b) -1 b = [1,2,3,4] // This is -1 since a is implicitly extended with a zero a.arrcmp(b) -1 a = [2,3].iterate() b = [2,3].iterate() b[1,1] = 100 a 0 1 2 3 4 5 b 0 1 2 3 100 5 a.arrcmp(b) -1 a[0,2] = 200 a 0 1 200 3 4 5 // Since the most significiant differing element // is 200, it determines the result of the arrcmp a.arrcmp(b) 1 // Type conversions are performed [1,2,3].arrcmp([1.,2.,3]) 0 // Heterogeneous lists and arrays can be compared a = {"one","two","three"} b = {"one","two hundred", "three"} a.arrcmp(b) -1