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 — локальная установка не требуется.
Все уроки этого курса
- table.sort с компараторами
- table.concat и table.move
- Глубокое и поверхностное копирование
- Преобразование таблиц: map, filter, reduce