table.sort z komparatorami
Proszę sortować tabele za pomocą niestandardowych funkcji porównujących i strategii stabilnego sortowania.
table.sort z komparatorami to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Czym jest table.sort?
table.sort sortuje tabelę w miejscu za pomocą funkcji porównującej. Bez komparatora używa operatora <.
Domyślne sortowanie rosnące
Wywołaj table.sort(t) dla tabeli liczb lub ciągów znaków, aby posortować ją rosnąco.
local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) endWłasny komparator
Przekaż funkcję function(a, b) return a < b end jako drugi argument.
local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))Sortowanie malejące
Odwróć porównanie, aby sortować malejąco.
local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))Sortowanie tabel według pola
Sortuj tablicę rekordów według określonego klucza pola.
local people = {
{name="Charlie", age=30},
{name="Alice", age=25},
{name="Bob", age=28}
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do print(p.name, p.age) endSortowanie według wielu kluczy
Sortuj według klucza głównego, a w przypadku remisów — według klucza dodatkowego.
table.sort(people, function(a, b)
if a.age ~= b.age then return a.age < b.age end
return a.name < b.name
end)Uwaga dotycząca stabilności
Sortowanie za pomocą table.sort w Lua nie jest gwarantowanie stabilne. Elementy równe mogą pojawić się w dowolnej kolejności. Aby uzyskać deterministyczne wyniki, użyj indeksu jako dodatkowego kryterium rozstrzygającego.
Sortowanie ciągów bez uwzględniania wielkości liter
Normalizuj ciągi za pomocą string.lower wewnątrz komparatora.
table.sort(words, function(a, b)
return a:lower() < b:lower()
end)Sortowanie z ekstraktorem klucza
Buforuj wyodrębnione klucze, aby uniknąć wielokrotnych obliczeń podczas sortowania, stosując podejście transformacji Schwartziana.
local function sortBy(t, keyFn)
local keyed = {}
for i, v in ipairs(t) do keyed[i] = {val=v, key=keyFn(v)} end
table.sort(keyed, function(a, b) return a.key < b.key end)
for i, item in ipairs(keyed) do t[i] = item.val end
endSortowanie dużych tabel
W przypadku bardzo dużych tabel rozważ transformację Schwartziana: połącz każdy element z jego kluczem sortowania, posortuj pary, a następnie wyodrębnij elementy. Dzięki temu klucz nie jest obliczany ponownie przy każdym porównaniu.
W miejscu a kopia
table.sort modyfikuje oryginalną tabelę. Aby posortować kopię, najpierw użyj table.move albo iteracji w celu utworzenia kopii, a następnie posortuj kopię.
Pytanie o komparator
Który komparator sortuje liczby w kolejności rosnącej?
Podsumowanie: table.sort
table.sort sortuje w miejscu, przyjmuje opcjonalny komparator, nie jest stabilne i jest często używane wraz ze strategiami opartymi na polach lub wielu kluczach, gdy wymagane jest złożone porządkowanie.
Często zadawane pytania
Czy lekcja „table.sort z komparatorami” jest bezpłatna?
Tak — pełny tekst „table.sort z komparatorami” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „table.sort z komparatorami”?
Proszę sortować tabele za pomocą niestandardowych funkcji porównujących i strategii stabilnego sortowania. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „table.sort z komparatorami”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- table.sort z komparatorami
- table.concat i table.move
- Kopia głęboka i płytka
- Przekształcanie tabel: map, filter, reduce