Sortowanie niestandardowe za pomocą funkcji
Część sekcji Logika i przepływ programu ścieżki Lua w Coddy. Lekcja 8 z 54.
Chociaż table.sort() świetnie sprawdza się w przypadku prostych list liczb lub ciągów znaków, dane z rzeczywistego świata są często bardziej złożone. Możesz mieć tablicę rekordów graczy, przedmiotów w ekwipunku lub wyników gry, w której każdy wpis jest tabelą zawierającą wiele pól.
Aby posortować te złożone struktury, musisz dokładnie określić, jak table.sort() ma porównywać dwa wpisy. W tym miejscu niezbędne stają się własne funkcje porównujące. Funkcja porównująca przyjmuje dwa elementy i zwraca true, jeśli pierwszy powinien znaleźć się przed drugim w posortowanej kolejności.
Oto przykład tabeli rekordów graczy:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Po sortowaniu tabela graczy będzie uporządkowana według wyniku malejąco: na pierwszym miejscu znajdzie się Bob (200), na drugim Charlie (175), a na trzecim Alice (150). Funkcja porównująca odczytuje pole score z tabeli każdego gracza, aby określić ich kolejność.
Możesz sortować według dowolnego pola: alfabetycznie według nazw, numerycznie według poziomów, a nawet łączyć kilka kryteriów.
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
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
1Zaawansowane iterowanie po tabelach
Iterowanie za pomocą pairs()Iterowanie za pomocą ipairs()pairs() a ipairs()Powtórka — karta postaci2Więcej funkcji biblioteki table
table.concat()Tworzenie tabel i unpack()table.sort()Sortowanie niestandardowe za pomocą funkcjiPodsumowanie — tablica najlepszych wyników5Projekt: silnik tekstowej gry przygodowej
Konfiguracja projektu: pokójŁączenie pokoiPoćwicz samodzielnie: Kompilator Lua online