| 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...) |
| |
| BESCHREIBUNG |
| Sortiert das Array <arr> entweder nach der Ordnungsfunktion |
| <ob->wrong_order(a, b)> oder nach der Closure cl. |
| |
| Normalerweise wird zuerst eine flache Kopie des Arrays <arr> erstellt |
| und die sortierte Kopie als Ergebnis zurueckgeliefert. Wird <arr> |
| jedoch als Referenz uebergeben, wird keine implizite Kopie erstellt |
| und das Originalarray sortiert. |
| |
| Wenn das Argument <arr> 0 ist, ist das Resultat der Funktion auch 0. |
| |
| <ob> ist das Objekt, in dem die Ordnungsfunktion <wrong_order()> |
| aufgerufen wird. <ob> kann das Objekt als solches enthalten, oder |
| einen String mit dem Objektnamen. Wird <ob> nicht angegeben, oder |
| enthaelt es weder einen String noch ein Objekt, wird stattdessen |
| this_object() verwendet. |
| |
| Die Elemente von <arr> werden paarweise an die Ordnungsfunktion |
| <wrong_order()> als Argumente uebergeben, gefolgt von den <extra> |
| Argumenten, falls vorhanden. Die Ordnungsfunktion <wrong_order> sollte |
| eine positve Zahl liefern, wenn die paarweisen Elemente in der |
| falschen Reihenfolge waren, 0 oder eine negative Zahl sonst. |
| |
| BEISPIELE |
| Um folgendes Array in aufsteigender Reihenfolge zu ordnen: |
| |
| arr = ({ 3, 8, 1, 3 }) |
| |
| wird als Ordnungsfunktion ist_groesser() verwendet: |
| |
| int ist_groesser(int a, int b) { |
| return a > b; |
| } |
| |
| Folgende Aufrufe von sort_array() sind alle aequivalent: |
| |
| arr = sort_array(arr, "ist_groesser", this_object()) |
| arr = sort_array(arr, "ist_groesser") |
| arr = sort_array(arr, #'ist_groesser) |
| arr = sort_array(arr, #'>) //dies ist die bevorzugte Variante :-) |
| arr = sort_array(arr, lambda(({'a, 'b}), ({#'>, 'a, 'b}))) |
| |
| Soll direkt das Original <arr> statt einer impliziten Kopie sortiert |
| werden: |
| |
| sort_array(&arr, #'>) |
| |
| Etwas komplizierter ist es, folgendes Array aufsteigend nach dem |
| zweiten Argument jedes Teilarrays zu ordnen: |
| |
| arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... }) |
| |
| Dafuer muss die Ordnungsfunktion folgende Form annehmen: |
| |
| int ist_groesser(mixed *a, mixed *b) { |
| return a[1] > b[1]; |
| } |
| |
| GESCHICHTE |
| LDMud 3.2.8 fuehrte die Moeglichkeit ein, zusaetzliche Argumente |
| <extra> zu uebergeben. |
| LDMud 3.3.720 unterstuetzt die Uebergabe von <arr> als Referenz und |
| sortiert das Original statt einer impliziten flachen Kopie. |
| |
| SIEHE AUCH |
| transpose_array(E), filter(E), map(E), alists(LPC) |