0Pricing
Lua Academy · Урок

table.sort с компараторами

Сортируйте таблицы с пользовательскими функциями-компараторами и используйте стратегии стабильной сортировки.

«table.sort с компараторами» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Что такое table.sort?

table.sort сортирует таблицу на месте с помощью функции сравнения. Без функции сравнения используется оператор <.

Сортировка по возрастанию по умолчанию

Вызовите table.sort(t) для таблицы чисел или строк, чтобы отсортировать её по возрастанию.

local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) end

Пользовательская функция сравнения

Передайте функцию function(a, b) return a < b end вторым аргументом.

local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))

Сортировка по убыванию

Измените сравнение на обратное, чтобы отсортировать элементы по убыванию.

local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))

Сортировка таблиц по полю

Отсортируйте массив записей по определённому ключу-полю.

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

Сортировка по нескольким ключам

Сначала сортируйте по основному ключу, а при совпадении — по вторичному.

table.sort(people, function(a, b)
  if a.age ~= b.age then return a.age < b.age end
  return a.name < b.name
end)

Замечание о стабильности

Для table.sort стабильность не гарантируется. Равные элементы могут оказаться в любом порядке. Для детерминированного результата используйте индекс как дополнительный критерий при равенстве.

Регистронезависимая сортировка строк

Нормализуйте строки с помощью string.lower внутри функции сравнения.

table.sort(words, function(a, b)
  return a:lower() < b:lower()
end)

Сортировка с извлечением ключа

Кэшируйте извлечённые ключи, чтобы избежать повторных вычислений во время сортировки, используя подход преобразования Шварца.

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

Сортировка больших таблиц

Для очень больших таблиц рассмотрите преобразование Шварца: объедините каждый элемент с его ключом сортировки, отсортируйте пары, а затем извлеките элементы. Это позволяет не вычислять ключ заново при каждом сравнении.

Изменение на месте и копирование

table.sort изменяет исходную таблицу. Чтобы отсортировать копию, сначала используйте table.move или переберите элементы и создайте копию, а затем отсортируйте её.

Вопрос о функции сравнения

Какая функция сравнения сортирует числа по возрастанию?

Повторение: table.sort

table.sort сортирует таблицу на месте, принимает необязательную функцию сравнения, не гарантирует стабильность и часто используется со стратегиями сортировки по полям или нескольким ключам для сложных требований к порядку.

Часто задаваемые вопросы

Урок «table.sort с компараторами» бесплатный?

Да — полный текст урока «table.sort с компараторами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «table.sort с компараторами»?

Сортируйте таблицы с пользовательскими функциями-компараторами и используйте стратегии стабильной сортировки. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «table.sort с компараторами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. table.sort с компараторами
  2. table.concat и table.move
  3. Глубокое и поверхностное копирование
  4. Преобразование таблиц: map, filter, reduce
← Назад к Lua Academy