Menu
Coddy logo textTech

table.sort()

Часть раздела Logic & Flow путешествия по Lua на Coddy — урок 7 из 54.

При работе с таблицами в стиле списков вам часто потребуется упорядочивать данные в определенном порядке. Lua предоставляет функцию table.sort() для сортировки элементов таблицы на месте, что означает, что она изменяет исходную таблицу, а не создает новую.

Базовый синтаксис прост:

table.sort(myTable)

По умолчанию table.sort() сортирует числа по возрастанию, а строки — по алфавиту. Вот пример со списком баллов:

local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- теперь scores содержит {42, 55, 67, 85, 91}

Для строк сортировка выполняется в алфавитном порядке:

local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- теперь names — это {"Alice", "Bob", "Charlie"}

Иногда стандартная сортировка — это не то, что вам нужно. Вы можете передать пользовательскую функцию сравнения в качестве второго аргумента, чтобы контролировать способ сравнения элементов. Эта функция принимает два элемента и возвращает true, если первый должен стоять перед вторым:

local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
    return a > b  -- Сортировка в порядке убывания
end)
-- теперь numbers содержит {8, 5, 2, 1}

Функция table.sort() работает только с таблицами в стиле списков, которые имеют последовательные целочисленные ключи, начинающиеся с 1. Это мощный инструмент для организации данных перед их отображением или обработкой в определенном порядке.

challenge icon

Задание

Легко

Напишите функцию sortScoresDescending, которая принимает таблицу scores и возвращает отформатированную строку отсортированных оценок в порядке убывания.

Используйте table.sort() с пользовательской функцией сравнения, чтобы расположить оценки от самых высоких к самым низким, затем используйте table.concat(), чтобы объединить их в одну строку, разделенную запятыми.

Параметры:

  • scores (table): Таблица в стиле списка, содержащая числовые оценки

Возвращает: Строка с оценками, отсортированными от самых высоких к самым низким, разделенными запятыми. Формат: 95,87,76,54

Шпаргалка

Функция table.sort() упорядочивает элементы таблицы на месте, изменяя исходную таблицу:

table.sort(myTable)

По умолчанию она сортирует числа по возрастанию, а строки — по алфавиту:

local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- теперь scores содержит {42, 55, 67, 85, 91}

local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- теперь names содержит {"Alice", "Bob", "Charlie"}

Вы можете передать пользовательскую функцию сравнения в качестве второго аргумента. Функция принимает два элемента и возвращает true, если первый должен стоять перед вторым:

local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
    return a > b  -- Сортировка по убыванию
end)
-- теперь numbers содержит {8, 5, 2, 1}

table.sort() работает только с таблицами в стиле списков, которые имеют последовательные целочисленные ключи, начиная с 1.

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

function sortScoresDescending(scores)
    -- Напишите код здесь
end
quiz iconПроверьте себя

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

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