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