blob: 0a5ddd8821a8fb21547bc8b27043e301d830b2fa [file] [log] [blame]
Zesstra051ad6b2020-01-23 21:46:58 +01001
2sort_array
3**********
4
5
6BEMERKUNGEN
7===========
8
9 Achtung, die Elemente in 'arr' werden nicht tief kopiert, sind sie
10 also selbst Arrays oder Mappings, so fuehrt eine Aenderung im
11 Rueckgabe- Array zur Aenderung im Ursprungsarray.
12
13
14BEISPIELE
15=========
16
17 1. Sortieren von Zahlen in aufsteigender Reihenfolge
18
19 int *arr = ({ 3, 8, 1, 3 })
20
21 // Folgend identische Resultate, aber andere Ansaetze:
22 #1: nutzt die 'Efun' > als Lfun-Closure (ideal hier):
23 sort_array(arr, #'>);
24
25 #2: mit Sortierfunktion im selben Objekt:
26 int is_greater (int a, int b) {
27 return a > b;
28 }
29
30 #2a: sortiert mittels der Lfun im selben Objekt die Elemente in das
31 Rueckgabearray
32 sort_array(arr, "is_greater", this_object())
33 sort_array(arr, "is_greater")
34
35 #2b: nutzt die Lfun is_greater() als Lfun-Closure (Funktionspointer)
36 sort_array(arr, #'is_greater)
37
38 #3: Nutzt eine Inline-Closure
39 sort_array(arr, function int (int a, int b) {
40 return a > b; } );
41
42 Resultat in allen Faellen: ({1,3,3,8})
43
44 2. Sortieren von geschachtelten Arrays
45
46 arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... })
47
48 // Vorgehen identisch, allerdings muss die Sortierfunktion
49 // angepasst werden:
50
51 int is_greater (<string|int> *a, <string|int> *b) {
52 return a[1] > b[1];
53 }