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 entweder nach der Ordnungsfunktion wrong_order(a, b)> oder nach der Closure cl. Normalerweise wird zuerst eine flache Kopie des Arrays erstellt und die sortierte Kopie als Ergebnis zurueckgeliefert. Wird jedoch als Referenz uebergeben, wird keine implizite Kopie erstellt und das Originalarray sortiert. Wenn das Argument 0 ist, ist das Resultat der Funktion auch 0. ist das Objekt, in dem die Ordnungsfunktion aufgerufen wird. kann das Objekt als solches enthalten, oder einen String mit dem Objektnamen. Wird nicht angegeben, oder enthaelt es weder einen String noch ein Objekt, wird stattdessen this_object() verwendet. Die Elemente von werden paarweise an die Ordnungsfunktion als Argumente uebergeben, gefolgt von den Argumenten, falls vorhanden. Die Ordnungsfunktion 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 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 zu uebergeben. LDMud 3.3.720 unterstuetzt die Uebergabe von als Referenz und sortiert das Original statt einer impliziten flachen Kopie. SIEHE AUCH transpose_array(E), filter(E), map(E), alists(LPC)