Menu
Coddy logo textTech

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

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

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

Шпаргалка

Для сортировки таблиц со сложными структурами данных используйте пользовательскую функцию сравнения с 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)

Это сортирует игроков по количеству очков в порядке убывания. Вы можете сортировать по любому полю в структуре таблицы.

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

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

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

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

Все уроки раздела Logic & Flow