| 
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)
 |