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