| |
| sort_array |
| ********** |
| |
| |
| BEMERKUNGEN |
| =========== |
| |
| Achtung, die Elemente in 'arr' werden nicht tief kopiert, sind sie |
| also selbst Arrays oder Mappings, so fuehrt eine Aenderung im |
| Rueckgabe- Array zur Aenderung im Ursprungsarray. |
| |
| |
| BEISPIELE |
| ========= |
| |
| 1. Sortieren von Zahlen in aufsteigender Reihenfolge |
| |
| int *arr = ({ 3, 8, 1, 3 }) |
| |
| // Folgend identische Resultate, aber andere Ansaetze: |
| #1: nutzt die 'Efun' > als Lfun-Closure (ideal hier): |
| sort_array(arr, #'>); |
| |
| #2: mit Sortierfunktion im selben Objekt: |
| int is_greater (int a, int b) { |
| return a > b; |
| } |
| |
| #2a: sortiert mittels der Lfun im selben Objekt die Elemente in das |
| Rueckgabearray |
| sort_array(arr, "is_greater", this_object()) |
| sort_array(arr, "is_greater") |
| |
| #2b: nutzt die Lfun is_greater() als Lfun-Closure (Funktionspointer) |
| sort_array(arr, #'is_greater) |
| |
| #3: Nutzt eine Inline-Closure |
| sort_array(arr, function int (int a, int b) { |
| return a > b; } ); |
| |
| Resultat in allen Faellen: ({1,3,3,8}) |
| |
| 2. Sortieren von geschachtelten Arrays |
| |
| arr = ({ ({ "foo", 3 }), ({ "quux", 1 }), ... }) |
| |
| // Vorgehen identisch, allerdings muss die Sortierfunktion |
| // angepasst werden: |
| |
| int is_greater (<string|int> *a, <string|int> *b) { |
| return a[1] > b[1]; |
| } |