Пользовательская сортировка с помощью функций
Часть раздела Логика и управление потоком путешествия по Lua на Coddy. Урок 8 из 54.
Хотя table.sort() отлично подходит для простых списков чисел или строк, реальные данные часто бывают сложнее. У тебя может быть таблица с записями об игроках, предметами инвентаря или игровыми очками, где каждая запись сама является таблицей с несколькими полями.
Чтобы отсортировать эти сложные структуры, нужно точно указать table.sort(), как сравнивать две записи. Здесь на помощь приходят пользовательские функции сравнения. Функция сравнения принимает два элемента и возвращает true, если первый должен стоять перед вторым в отсортированном порядке.
Вот пример таблицы с записями игроков:
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)После сортировки таблица игроков будет упорядочена по убыванию очков: первым будет Bob (200), вторым — Charlie (175), а третьей — Alice (150). Функция сравнения обращается к полю score каждой таблицы игроков, чтобы определить их порядок.
Вы можете выполнять сортировку по любому полю: имена — в алфавитном порядке, уровни — по числовому значению или даже сочетать несколько критериев.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордовПотренируйтесь самостоятельно: Онлайн-компилятор Lua