blob: 3316a0c9e819835ba61d55fa3611207f8f1668e5 [file] [log] [blame]
Zesstrab6ac9f62020-01-21 11:11:16 +01001SYNOPSIS
2 mixed * sort_array(mixed *arr, string wrong_order)
3 mixed * sort_array(mixed *arr, string wrong_order, object|string ob)
4 mixed * sort_array(mixed *arr, string wrong_order, object|string ob,
5 mixed extra...)
6 mixed * sort_array(mixed *arr, closure cl)
7 mixed * sort_array(mixed *arr, closure cl, mixed extra...)
MG Mud User88f12472016-06-24 23:31:02 +02008
9BESCHREIBUNG
Zesstrab6ac9f62020-01-21 11:11:16 +010010 Sortiert das Array <arr> entweder nach der Ordnungsfunktion
11 <ob->wrong_order(a, b)> oder nach der Closure cl.
MG Mud User88f12472016-06-24 23:31:02 +020012
Zesstrab6ac9f62020-01-21 11:11:16 +010013 Normalerweise wird zuerst eine flache Kopie des Arrays <arr> erstellt
14 und die sortierte Kopie als Ergebnis zurueckgeliefert. Wird <arr>
15 jedoch als Referenz uebergeben, wird keine implizite Kopie erstellt
16 und das Originalarray sortiert.
MG Mud User88f12472016-06-24 23:31:02 +020017
Zesstrab6ac9f62020-01-21 11:11:16 +010018 Wenn das Argument <arr> 0 ist, ist das Resultat der Funktion auch 0.
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstrab6ac9f62020-01-21 11:11:16 +010020 <ob> ist das Objekt, in dem die Ordnungsfunktion <wrong_order()>
21 aufgerufen wird. <ob> kann das Objekt als solches enthalten, oder
22 einen String mit dem Objektnamen. Wird <ob> nicht angegeben, oder
23 enthaelt es weder einen String noch ein Objekt, wird stattdessen
24 this_object() verwendet.
MG Mud User88f12472016-06-24 23:31:02 +020025
Zesstrab6ac9f62020-01-21 11:11:16 +010026 Die Elemente von <arr> werden paarweise an die Ordnungsfunktion
27 <wrong_order()> als Argumente uebergeben, gefolgt von den <extra>
28 Argumenten, falls vorhanden. Die Ordnungsfunktion <wrong_order> sollte
29 eine positve Zahl liefern, wenn die paarweisen Elemente in der
30 falschen Reihenfolge waren, 0 oder eine negative Zahl sonst.
MG Mud User88f12472016-06-24 23:31:02 +020031
Zesstrab6ac9f62020-01-21 11:11:16 +010032BEISPIELE
33 Um folgendes Array in aufsteigender Reihenfolge zu ordnen:
MG Mud User88f12472016-06-24 23:31:02 +020034
Zesstrab6ac9f62020-01-21 11:11:16 +010035 arr = ({ 3, 8, 1, 3 })
MG Mud User88f12472016-06-24 23:31:02 +020036
Zesstrab6ac9f62020-01-21 11:11:16 +010037 wird als Ordnungsfunktion ist_groesser() verwendet:
MG Mud User88f12472016-06-24 23:31:02 +020038
Zesstrab6ac9f62020-01-21 11:11:16 +010039 int ist_groesser(int a, int b) {
40 return a > b;
41 }
MG Mud User88f12472016-06-24 23:31:02 +020042
Zesstrab6ac9f62020-01-21 11:11:16 +010043 Folgende Aufrufe von sort_array() sind alle aequivalent:
MG Mud User88f12472016-06-24 23:31:02 +020044
Zesstrab6ac9f62020-01-21 11:11:16 +010045 arr = sort_array(arr, "ist_groesser", this_object())
46 arr = sort_array(arr, "ist_groesser")
47 arr = sort_array(arr, #'ist_groesser)
48 arr = sort_array(arr, #'>) //dies ist die bevorzugte Variante :-)
49 arr = sort_array(arr, lambda(({'a, 'b}), ({#'>, 'a, 'b})))
MG Mud User88f12472016-06-24 23:31:02 +020050
Zesstrab6ac9f62020-01-21 11:11:16 +010051 Soll direkt das Original <arr> statt einer impliziten Kopie sortiert
52 werden:
MG Mud User88f12472016-06-24 23:31:02 +020053
Zesstrab6ac9f62020-01-21 11:11:16 +010054 sort_array(&arr, #'>)
MG Mud User88f12472016-06-24 23:31:02 +020055
Zesstrab6ac9f62020-01-21 11:11:16 +010056 Etwas komplizierter ist es, folgendes Array aufsteigend nach dem
57 zweiten Argument jedes Teilarrays zu ordnen:
MG Mud User88f12472016-06-24 23:31:02 +020058
Zesstrab6ac9f62020-01-21 11:11:16 +010059 arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... })
MG Mud User88f12472016-06-24 23:31:02 +020060
Zesstrab6ac9f62020-01-21 11:11:16 +010061 Dafuer muss die Ordnungsfunktion folgende Form annehmen:
MG Mud User88f12472016-06-24 23:31:02 +020062
Zesstrab6ac9f62020-01-21 11:11:16 +010063 int ist_groesser(mixed *a, mixed *b) {
64 return a[1] > b[1];
65 }
MG Mud User88f12472016-06-24 23:31:02 +020066
Zesstrab6ac9f62020-01-21 11:11:16 +010067GESCHICHTE
68 LDMud 3.2.8 fuehrte die Moeglichkeit ein, zusaetzliche Argumente
69 <extra> zu uebergeben.
70 LDMud 3.3.720 unterstuetzt die Uebergabe von <arr> als Referenz und
71 sortiert das Original statt einer impliziten flachen Kopie.
MG Mud User88f12472016-06-24 23:31:02 +020072
Zesstrab6ac9f62020-01-21 11:11:16 +010073SIEHE AUCH
74 transpose_array(E), filter(E), map(E), alists(LPC)