Sortieren
Sortierfunktionen der TapHome-Skripte — ORDER, ORDERINDEX und ihre Varianten STRICT und absteigend zum Sortieren von Werten oder zur Rückgabe der Indizes in Sortierreihenfolge.
Die Funktionen ORDER sortieren Werte und geben eine neue Sammlung zurück — entweder die sortierten Werte oder, in den Varianten ORDERINDEX, die ursprünglichen nullbasierten Positionen der Werte in sortierter Reihenfolge.
| Funktion | Reihenfolge | Gibt zurück | Unbekannte Werte (Null, NaN) |
|---|---|---|---|
ORDER | aufsteigend | Werte | entfernt |
ORDERSTRICT | aufsteigend | Werte | behalten, an den Anfang gestellt |
ORDERDESC | absteigend | Werte | entfernt |
ORDERDESCSTRICT | absteigend | Werte | behalten, an den Anfang gestellt |
ORDERINDEX | aufsteigend | Indizes | entfernt |
ORDERINDEXSTRICT | aufsteigend | Indizes | behalten, an den Anfang gestellt |
ORDERINDEXDESC | absteigend | Indizes | entfernt |
ORDERINDEXDESCSTRICT | absteigend | Indizes | behalten, an den Anfang gestellt |
Regeln, die für alle acht Funktionen gelten:
- Sie nehmen 1 bis 100 Werte oder genau eine Sammlung. Die Quellsammlung wird nicht geändert.
- Die Werte müssen vergleichbar und von einer Art sein — Zahlen, Zeichen, Strings,
datetimeodertimespan; das Mischen von Zahlen und Strings ist ein Fehler. - Strings und Zeichen werden nach dem Zeichencode sortiert, daher kommen Großbuchstaben vor Kleinbuchstaben.
- Gleiche Werte behalten ihre ursprüngliche Reihenfolge.
- Die Varianten
STRICTstellen unbekannte Werte an den Anfang, auch in den absteigenden Varianten. - Eine leere Sammlung ist ein Fehler: Collection is null or empty.
Beispiel — die günstigste Stunde aus einer Preisliste
VAR prices := {12.5, 8.1, 20.0, 9.9};
VAR cheapest := GETAT(ORDER(prices), 0);
# cheapest = 8.1
VAR cheapestHour := GETAT(ORDERINDEX(prices), 0);
# cheapestHour = 1ORDER
ORDER gibt die Werte aufsteigend sortiert zurück, ohne Null und NaN.
| |
ORDER(3, 1, 2);
# Result: {1, 2, 3}
ORDER(3, NaN, 2, NaN);
# Result: {2, 3}
ORDER('Z', 'a', 'X');
# Result: {'X', 'Z', 'a'}
ORDER("str1", NULL, "STR2", "stR1");
# Result: {"STR2", "stR1", "str1"}
ORDER(NULL, TIMESPAN(0, 0, 0, 0, 100), TIMESPAN(0, 0, 0, 0, 99));
# Result: {TIMESPAN(0, 0, 0, 0, 99), TIMESPAN(0, 0, 0, 0, 100)}ORDERSTRICT
ORDERSTRICT gibt die Werte aufsteigend sortiert zurück und behält Null und NaN am Anfang.
| |
ORDERSTRICT(3, NaN, 2, NaN);
# Result: {NaN, NaN, 2, 3}
ORDERSTRICT("str1", "STR2", "stR1");
# Result: {"STR2", "stR1", "str1"}
ORDERSTRICT(NULL, TIMESPAN(0, 0, 0, 0, 99));
# Result: {NULL, TIMESPAN(0, 0, 0, 0, 99)}ORDERDESC
ORDERDESC gibt die Werte absteigend sortiert zurück, ohne Null und NaN.
| |
ORDERDESC(3, 1, 2);
# Result: {3, 2, 1}
ORDERDESC(3, NaN, 2, NaN);
# Result: {3, 2}
ORDERDESC('Z', 'a', 'X');
# Result: {'a', 'Z', 'X'}
ORDERDESC("str1", NULL, "STR2", "stR1");
# Result: {"str1", "stR1", "STR2"}ORDERDESCSTRICT
ORDERDESCSTRICT gibt die Werte absteigend sortiert zurück und behält Null und NaN am Anfang.
| |
ORDERDESCSTRICT(3, NaN, 2, NaN);
# Result: {NaN, NaN, 3, 2}
ORDERDESCSTRICT(NULL, TIMESPAN(0, 0, 0, 0, 99), TIMESPAN(0, 0, 0, 0, 100));
# Result: {NULL, TIMESPAN(0, 0, 0, 0, 100), TIMESPAN(0, 0, 0, 0, 99)}ORDERINDEX
ORDERINDEX gibt die Positionen der Werte in aufsteigender Reihenfolge des Werts zurück, ohne die Positionen von Null und NaN.
| |
Rückgabewert — collection<int> mit nullbasierten Positionen in der Eingabe. Das erste Element ist die Position des kleinsten Werts.
ORDERINDEX(3, 1, 2);
# Result: {1, 2, 0}
ORDERINDEX(3, NaN, 2, NaN);
# Result: {2, 0}
ORDERINDEX("str1", NULL, "STR2", "stR1");
# Result: {2, 3, 0}ORDERINDEXSTRICT
ORDERINDEXSTRICT gibt die Positionen der Werte in aufsteigender Reihenfolge des Werts zurück, mit den Positionen von Null und NaN zuerst.
| |
ORDERINDEXSTRICT(3, 1, 2);
# Result: {1, 2, 0}
ORDERINDEXSTRICT(3, NaN, 2, NaN);
# Result: {1, 3, 2, 0}
ORDERINDEXSTRICT(NULL, TIMESPAN(0, 0, 0, 0, 99));
# Result: {0, 1}ORDERINDEXDESC
ORDERINDEXDESC gibt die Positionen der Werte in absteigender Reihenfolge des Werts zurück, ohne die Positionen von Null und NaN.
| |
ORDERINDEXDESC(3, 1, 2);
# Result: {0, 2, 1}
ORDERINDEXDESC(3, NaN, 2);
# Result: {0, 2}
ORDERINDEXDESC("str1", NULL, "STR2", "stR1");
# Result: {0, 3, 2}ORDERINDEXDESCSTRICT
ORDERINDEXDESCSTRICT gibt die Positionen der Werte in absteigender Reihenfolge des Werts zurück, mit den Positionen von Null und NaN zuerst.
| |
ORDERINDEXDESCSTRICT(3, 1, 2);
# Result: {0, 2, 1}
ORDERINDEXDESCSTRICT(3, NaN, 2, NaN);
# Result: {1, 3, 0, 2}
ORDERINDEXDESCSTRICT(NULL, TIMESPAN(0, 0, 0, 0, 99));
# Result: {0, 1}