Menu
CoddyTech

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

Часть раздела Логика и управление потоком путешествия по 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 каждой таблицы игроков, чтобы определить их порядок.

Вы можете выполнять сортировку по любому полю: имена — в алфавитном порядке, уровни — по числовому значению или даже сочетать несколько критериев.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор Lua