0Pricing
Lua Academy · Lekcja

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) end

Wł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) end

Sortowanie 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
end

Sortowanie 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

  1. table.sort z komparatorami
  2. table.concat i table.move
  3. Kopia głęboka i płytka
  4. Przekształcanie tabel: map, filter, reduce
← Powrót do Lua Academy