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. Это мощный инструмент для организации данных перед их отображением или обработкой в определенном порядке.
Задание
ЛегкоНапишите функцию 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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутая итерация таблиц
Итерация с помощью pairs()Итерация с помощью ipairs()pairs() против ipairs()Повторение — Лист персонажа2Дополнительные функции библиотеки table
table.concat()Создание таблиц и unpack()table.sort()Пользовательская сортировка с помощью функцийИтоги — Таблица рекордов