Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc/efun/sort_arraySYNOPSIS
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)
zurück zur Übersicht