SYNOPSIS
mixed * sort_array(mixed *arr, string wrong_order)
mixed * sort_array(mixed *arr, string wrong_order, object|string ob)
mixed * sort_array(mixed *arr, string wrong_order, object|string ob
, mixed extra...)
mixed * sort_array(mixed *arr, closure cl)
mixed * sort_array(mixed *arr, closure cl, mixed extra...)
DESCRIPTION
Sort the copy either by the ordering function ob->wrong_order(a, b),
or by the closure expression <cl>.
Usually a shallow copy of <arr> is made first and the sorted copy is
returned as result. However, if <arr> is given as a reference, no copy
will be made and <arr> will be sorted in-place.
If the <arr> argument equals 0, the result is also 0.
<ob> is the object in which the ordering function is called
and may be given as object or by its filename. If <ob> is omitted
or neither a string nor an object, it defaults to this_object().
The elements from the array to be sorted are passed in pairs to
the function <wrong_order> as arguments, followed by the <extra>
arguments if any.
The function should return a positive number if the elements
are in the wrong order. It should return 0 or a negative
number if the elements are in the correct order.
EXAMPLES
To sort an array
arr = ({ 3, 8, 1, 3 })
in ascending order with the help of the ordering function
int is_greater (int a, int b) {
return a > b;
}
the following uses of sort_array() are equivalent:
arr = sort_array(arr, "is_greater", this_object())
arr = sort_array(arr, "is_greater")
arr = sort_array(arr, #'is_greater)
arr = sort_array(arr, #'>) (this is the preferred variant :-)
arr = sort_array(arr, lambda(({'a, 'b}), ({#'>, 'a, 'b})))
If no implicit shallow copy of <arr> should be made, pass <arr> as
reference:
sort_array(&arr, #'>)
A more complicated example is to sort the array
arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... })
in ascending order by the second element of each subarray.
For this, the ordering function should be like
int is_greater (mixed *a, mixed *b) {
return a[1] > b[1];
}
HISTORY
LDMud 3.2.8 added the support of extra arguments.
LDMud 3.3.720 added the support of references to sort in-place.
SEE ALSO
transpose_array(E), filter(E), map(E), alists(LPC)
|