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