Sortowanie
Funkcje sortowania w skryptach TapHome — ORDER, ORDERINDEX oraz ich warianty STRICT i malejące do sortowania wartości albo zwracania indeksów kolejności sortowania.
Funkcje ORDER sortują wartości i zwracają nową kolekcję — albo posortowane wartości, albo, w wariantach ORDERINDEX, pierwotne pozycje wartości liczone od zera w kolejności posortowanej.
| Funkcja | Kolejność | Zwraca | Wartości nieznane (Null, NaN) |
|---|---|---|---|
ORDER | rosnąco | wartości | usuwane |
ORDERSTRICT | rosnąco | wartości | zachowywane, na początku |
ORDERDESC | malejąco | wartości | usuwane |
ORDERDESCSTRICT | malejąco | wartości | zachowywane, na początku |
ORDERINDEX | rosnąco | indeksy | usuwane |
ORDERINDEXSTRICT | rosnąco | indeksy | zachowywane, na początku |
ORDERINDEXDESC | malejąco | indeksy | usuwane |
ORDERINDEXDESCSTRICT | malejąco | indeksy | zachowywane, na początku |
Zasady wspólne dla wszystkich ośmiu funkcji:
- Przyjmują od 1 do 100 wartości albo dokładnie jedną kolekcję. Kolekcja źródłowa nie jest zmieniana.
- Wartości muszą być porównywalne i jednego rodzaju — liczby, znaki, teksty,
datetimelubtimespan; mieszanie liczb i tekstów to błąd. - Teksty i znaki są sortowane według kodu znaku, więc wielkie litery są przed małymi.
- Równe wartości zachowują pierwotną kolejność.
- Warianty
STRICTumieszczają wartości nieznane na początku, także w wariantach malejących. - Pusta kolekcja to błąd: Collection is null or empty.
Przykład — najtańsza godzina z listy 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 zwraca wartości posortowane rosnąco, bez Null i 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 zwraca wartości posortowane rosnąco i zachowuje Null i NaN na począ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 zwraca wartości posortowane malejąco, bez Null i 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 zwraca wartości posortowane malejąco i zachowuje Null i NaN na począ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 zwraca pozycje wartości w kolejności rosnącej wartości, bez pozycji Null i NaN.
| |
Zwraca — collection<int> pozycji w danych wejściowych liczonych od zera. Pierwszy element to pozycja najmniejszej wartości.
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 zwraca pozycje wartości w kolejności rosnącej wartości, z pozycjami Null i NaN na począ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 zwraca pozycje wartości w kolejności malejącej wartości, bez pozycji Null i 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 zwraca pozycje wartości w kolejności malejącej wartości, z pozycjami Null i NaN na począ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}