Třídění
Funkce skriptu TapHome pro třídění — ORDER, ORDERINDEX a jejich varianty STRICT a sestupné, které třídí hodnoty nebo vracejí indexy v pořadí třídění.
Funkce ORDER třídí hodnoty a vracejí novou kolekci — buď seřazené hodnoty, nebo ve variantách ORDERINDEX původní pozice hodnot (počítané od nuly) v seřazeném pořadí.
| Funkce | Pořadí | Vrací | Neznámé hodnoty (Null, NaN) |
|---|---|---|---|
ORDER | vzestupně | hodnoty | odstraněny |
ORDERSTRICT | vzestupně | hodnoty | zachovány, na začátku |
ORDERDESC | sestupně | hodnoty | odstraněny |
ORDERDESCSTRICT | sestupně | hodnoty | zachovány, na začátku |
ORDERINDEX | vzestupně | indexy | odstraněny |
ORDERINDEXSTRICT | vzestupně | indexy | zachovány, na začátku |
ORDERINDEXDESC | sestupně | indexy | odstraněny |
ORDERINDEXDESCSTRICT | sestupně | indexy | zachovány, na začátku |
Pravidla společná všem osmi funkcím:
- Přijímají 1 až 100 hodnot, nebo právě jednu kolekci. Zdrojová kolekce se nemění.
- Hodnoty musí být porovnatelné a jednoho druhu — čísla, znaky, řetězce,
datetimenebotimespan; míchání čísel a řetězců je chyba. - Řetězce a znaky se třídí podle kódu znaku, takže velká písmena jsou před malými.
- Shodné hodnoty si zachovají původní pořadí.
- Varianty
STRICTdávají neznámé hodnoty na začátek, i v sestupných variantách. - Prázdná kolekce je chyba: Collection is null or empty.
Příklad — nejlevnější hodina ze seznamu cen
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 vrátí hodnoty seřazené vzestupně, bez Null a 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 vrátí hodnoty seřazené vzestupně a Null a NaN ponechá na začátku.
| |
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 vrátí hodnoty seřazené sestupně, bez Null a 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 vrátí hodnoty seřazené sestupně a Null a NaN ponechá na začátku.
| |
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 vrátí pozice hodnot ve vzestupném pořadí hodnot, bez pozic Null a NaN.
| |
Vrací — collection<int> pozic ve vstupu počítaných od nuly. První prvek je pozice nejmenší hodnoty.
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 vrátí pozice hodnot ve vzestupném pořadí hodnot, s pozicemi Null a NaN na začátku.
| |
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 vrátí pozice hodnot v sestupném pořadí hodnot, bez pozic Null a 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 vrátí pozice hodnot v sestupném pořadí hodnot, s pozicemi Null a NaN na začátku.
| |
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}