0Pricing
Lua Academy · Урок

Длина и сортировка

Подсчитывайте и сортируйте последовательности.

«Длина и сортировка» — бесплатный урок Lua Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Оператор длины

Оператор # возвращает количество элементов в последовательности.

Для аккуратной таблицы с нумерацией от 1 и тремя элементами значение #t равно 3. Последний элемент находится по индексу #t.

local list = {"a", "b", "c"}
print(#list)
print(list[#list])

Длина в цикле

Используйте #t как верхнюю границу числового цикла for, чтобы посетить каждый индекс.

Поскольку последовательности нумеруются с 1, диапазон имеет вид 1, #t.

local nums = {10, 20, 30, 40}
for i = 1, #nums do
  print(i, nums[i])
end

Пустые таблицы

Пустая последовательность имеет длину 0.

Поэтому выражение #t == 0 — быстрый способ проверить, есть ли в списке элементы.

local empty = {}
print(#empty)
if #empty == 0 then
  print("list is empty")
end

Длина после изменений

Когда вы добавляете или удаляете элементы с помощью функций table, значение # обновляется соответствующим образом.

Вставка увеличивает количество элементов, а удаление уменьшает его.

local list = {"a", "b"}
table.insert(list, "c")
print(#list)
table.remove(list)
print(#list)

Пропуски нарушают длину

# надёжен только для последовательностей без пропусков. Пропуск может сделать результат неопределённым.

Используйте table.insert и table.remove, чтобы результат # оставался надёжным.

local good = {1, 2, 3}
print(#good)
table.insert(good, 4)
print(#good)

Сортировка на месте

table.sort(t) переупорядочивает последовательность на месте — по умолчанию от меньшего к большему.

Она изменяет исходную таблицу, а не возвращает новую.

local nums = {3, 1, 2}
table.sort(nums)
print(nums[1], nums[2], nums[3])

Сортировка строк

По умолчанию строки сортируются в алфавитном порядке, при этом символы сравниваются по одному.

После сортировки индекс 1 содержит первый элемент в этом порядке.

local names = {"Cy", "Ann", "Bob"}
table.sort(names)
print(names[1], names[2], names[3])

Порядок по убыванию

Передайте функцию сравнения, чтобы управлять порядком. Возвращаемое значение a > b сортирует элементы от большего к меньшему.

Функция решает, должен ли a стоять перед b.

local nums = {3, 1, 4, 2}
table.sort(nums, function(a, b)
  return a > b
end)
print(nums[1], nums[2], nums[3], nums[4])

Пользовательские сравнения

Функции сравнения позволяют сортировать по любому правилу, например по длине строки, а не по алфавиту.

Ниже сначала идут короткие слова.

local words = {"hello", "hi", "howdy"}
table.sort(words, function(a, b)
  return #a < #b
end)
print(words[1], words[2], words[3])

Длина и сортировка

Объедините инструменты: отсортируйте список, а затем прочитайте крайние элементы по их позициям.

После сортировки по возрастанию минимальный элемент находится по индексу 1, а максимальный — по индексу #t.

local data = {7, 2, 9, 4}
table.sort(data)
print("min:", data[1])
print("max:", data[#data])

Сначала сортировка, затем перебор

Распространённая цепочка обработки: отсортировать последовательность, а затем пройти по ней с помощью ipairs, чтобы вывести элементы по порядку.

Сортировка переупорядочивает ту же таблицу с нумерацией от 1, поэтому перебор следует новому порядку.

local scores = {50, 10, 30}
table.sort(scores)
for i, s in ipairs(scores) do
  print(i, s)
end

Быстрая проверка

Вспомните, что возвращает оператор длины.

Повторение

Вы узнали, что #t подсчитывает элементы в последовательности без пропусков, последний элемент находится по адресу t[#t], а table.sort переупорядочивает элементы на месте — по возрастанию по умолчанию или с помощью пользовательской функции сравнения.

Теперь вместе с insert, remove и ipairs вы можете уверенно работать с последовательностями Lua.

Часто задаваемые вопросы

Урок «Длина и сортировка» бесплатный?

Да — полный текст урока «Длина и сортировка» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Длина и сортировка»?

Подсчитывайте и сортируйте последовательности. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Длина и сортировка»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Массивы как таблицы
  2. Добавление и удаление элементов
  3. Итерация с ipairs
  4. Длина и сортировка
← Назад к Lua Academy