Sortowanie niestandardowe
Część sekcji Logika i przepływ programu ścieżki GDScript w Coddy. Lekcja 51 z 78.
sort() porządkuje tablicę rosnąco i zmienia samą tablicę. Liczby są uporządkowane od najmniejszej do największej, a ciągi znaków według tej samej kolejności co w min(), najpierw wielkie litery. reverse() zmienia kolejność na malejącą:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]W przypadku każdej innej kolejności wywołaj sort_custom() z funkcją porównującą. Otrzymuje ona dwa elementy, a i b, i zwraca true, gdy a musi znaleźć się przed b. Przekaż funkcję, podając jej nazwę, bez nawiasów:
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]Porównanie może sprawdzać elementy. Ta funkcja umieszcza na początku słownik z największą wartością "hp":
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]Sortowanie nie jest stabilne: elementy, które są uznawane za równe, mogą znaleźć się w dowolnej kolejności. Gdy kolejność elementów o równych wartościach ma znaczenie, porównaj drugie pole, gdy pierwsze jest równe:
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]sort_custom() jest dostępne w Array, ale nie w PackedStringArray, które zwraca split(), więc najpierw przekonwertuj je za pomocą Array(...). Spotkasz się też z porównaniem zapisanym bezpośrednio w wywołaniu, tak jak w sort_custom(func(a, b): return a > b). Taka forma to lambda, omawiana w rozdziale Funkcje zaawansowane.
Wyzwanie
ŁatwyProgram odczytuje dwa wiersze: liczby całkowite oddzielone spacjami oraz słowa oddzielone spacjami. Podany kod przechowuje je w numbers (tablicy liczb całkowitych) i words (tablicy ciągów znaków).
- Na najwyższym poziomie napisz funkcję porównującą
by_length(a: String, b: String) -> bool. Krótsze słowo powinno być pierwsze, a słowa o tej samej długości powinny być uporządkowane alfabetycznie. - Wyświetl cztery wiersze: liczby w kolejności rosnącej, liczby w kolejności malejącej, słowa w kolejności alfabetycznej (za pomocą
sort()) oraz słowa posortowane za pomocąsort_custom(by_length).
Dla danych wejściowych 5 3 8 1 2 i elephant cat dolphin bee wynikiem jest:
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]Spróbuj swoich sił
extends Node
# Napisz tutaj funkcję porównującą by_length()
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# Posortuj tablice i wypisz cztery wiersze
pass
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków — zagadnienia zaawansowane
Metody łańcuchów znakówWyszukiwanie w łańcuchach znakówZastępowanie i przycinanieDzielenie i łączeniePodsumowanie — sprawdzanie nazwy użytkownika4Słowniki, część 2
Zagnieżdżone słownikiTablice słownikówŁączenie słownikówKopiowanie słownikówPodsumowanie – licznik częstotliwości7Typy wyliczeniowe
Czym jest typ wyliczeniowy?Definiowanie typu wyliczeniowegoWartości typu wyliczeniowegoTypy wyliczeniowe w matchPowtórka – sygnalizacja świetlna10Zaawansowane funkcje
Zwracanie wielu wartościFunkcje lambda — część 1Funkcje lambda — część 2Powtórka — sortowanie za pomocą lambdaFunkcje rekurencyjne — część 1Funkcje rekurencyjne — część 2Powtórka — sumowanie zagnieżdżonej tablicy13System zarządzania zapasami
Omówienie projektuDodawanie produktu2Zaawansowane podejmowanie decyzji
Dopasowanie ze zmiennymiStrażnicy dopasowaniaWzorce tablicWzorce słownikówSprawdzanie przynależnościPowtórka — parser poleceń5Aplikacja książki kontaktów
Wyświetlanie menuDodawanie kontaktu8Menedżer danych studentów
Przegląd projektuDodaj studenta3Tablice wielowymiarowe
Podstawy tablic 2DDostęp do elementów tablic 2DPętle zagnieżdżone z tablicami 2DPodsumowanie — tablice 2DTablice postrzępioneTypowe wzorce tablic 2DPodsumowanie — plansza do gry6Zbiory ze słownikami
Czym jest zbiór?Słownik jako zbiórDodawanie i usuwanieSuma i część wspólnaRóżnica zbiorówPowtórka – usuwanie duplikatów9Zaawansowana agregacja danych
Sumowanie wartościZnajdowanie minimum i maksimumSortowanie niestandardowePodsumowanie – Sortownik słownikówPoćwicz samodzielnie: Kompilator GDScript online