Добавление и удаление элементов
Используйте table.insert и remove.
«Добавление и удаление элементов» — бесплатный урок Lua Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Расширение последовательности
Размер реальных списков меняется во время работы программы. В Lua для добавления элементов в конец используется table.insert.
Поскольку последовательности используют индексацию с 1, добавленный после двух элементов элемент окажется по индексу 3.
local list = {"a", "b"}
table.insert(list, "c")
print(list[1], list[2], list[3])Добавление в конец с помощью table.insert
При вызове с двумя аргументами table.insert(t, value) помещает value в позицию сразу после текущего последнего индекса.
Каждый вызов увеличивает последовательность на один элемент, сохраняя непрерывность индексов.
local q = {}
table.insert(q, "first")
table.insert(q, "second")
print(q[1], q[2])Вставка в указанную позицию
При вызове с тремя аргументами table.insert(t, pos, value) вставляет значение по индексу pos и сдвигает последующие элементы вверх.
Здесь мы помещаем "X" в позицию 2, поэтому прежний второй элемент перемещается в позицию 3.
local list = {"a", "b", "c"}
table.insert(list, 2, "X")
print(list[1], list[2], list[3], list[4])Вставка в начало
Чтобы добавить элемент в начало, вставьте его в позицию 1. Каждый существующий элемент сдвинется на один индекс вверх.
Это удобно, но медленнее для больших списков, поскольку Lua приходится перемещать все элементы.
local list = {"b", "c"}
table.insert(list, 1, "a")
print(list[1], list[2], list[3])Удаление последнего элемента
table.remove(t) с одним аргументом удаляет и возвращает последний элемент.
Последовательность уменьшается на один элемент и остаётся без пропусков.
local list = {"a", "b", "c"}
local gone = table.remove(list)
print("removed:", gone)
print(list[1], list[2], list[3])Удаление в указанной позиции
table.remove(t, pos) удаляет элемент в позиции pos и сдвигает последующие элементы вниз, закрывая пропуск.
Помните, что индексы начинаются с 1, поэтому pos = 1 удаляет первый элемент.
local list = {"a", "b", "c"}
local gone = table.remove(list, 1)
print("removed:", gone)
print(list[1], list[2])remove возвращает значение
Обе формы вызова table.remove возвращают извлечённое значение, поэтому его можно сразу использовать.
Благодаря этому таблица может работать как стек: добавляйте элементы с помощью insert, а извлекайте с помощью remove.
local stack = {}
table.insert(stack, 10)
table.insert(stack, 20)
local top = table.remove(stack)
print("popped:", top)Простая очередь
Добавляйте элементы в конец, а удаляйте из начала (pos = 1), чтобы смоделировать очередь: первым пришёл — первым вышел.
После каждого удаления остальные элементы сдвигаются вниз, поэтому следующий элемент оказывается в индексе 1.
local queue = {}
table.insert(queue, "Ann")
table.insert(queue, "Bob")
print("serving:", table.remove(queue, 1))
print("next:", queue[1])Избегайте ручных пропусков
Присваивание элементу значения nil с помощью list[2] = nil может оставить пропуск в середине и нарушить последовательность.
Предпочитайте table.remove: эта функция сдвигает элементы и сохраняет непрерывность индексов.
local list = {"a", "b", "c"}
table.remove(list, 2)
print(list[1], list[2])Построение из входных данных
Распространённый шаблон: начать с пустой таблицы и добавлять элементы по мере поступления данных.
Здесь мы собираем чётные числа в новую последовательность с помощью insert.
local evens = {}
for n = 1, 6 do
if n % 2 == 0 then
table.insert(evens, n)
end
end
print(evens[1], evens[2], evens[3])Совместное использование insert и remove
Операции можно свободно комбинировать. Ниже мы добавляем три имени, а затем удаляем имя из середины.
После удаления в списке остаются два элемента с последовательными индексами.
local names = {}
table.insert(names, "Al")
table.insert(names, "Bea")
table.insert(names, "Cy")
table.remove(names, 2)
print(names[1], names[2])Проверка знаний
Подумайте, как удаление сдвигает элементы последовательности.
Итоги
Вы научились расширять списки с помощью table.insert (добавлять элементы в конец или вставлять их в позицию с индексацией от 1) и уменьшать их с помощью table.remove, которая возвращает удалённое значение и закрывает пропуски.
Избегайте ручных пропусков с nil. Далее вы научитесь удобно перебирать элементы с помощью ipairs.
Часто задаваемые вопросы
Урок «Добавление и удаление элементов» бесплатный?
Да — полный текст урока «Добавление и удаление элементов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Добавление и удаление элементов»?
Используйте table.insert и remove. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Добавление и удаление элементов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Массивы как таблицы
- Добавление и удаление элементов
- Итерация с ipairs
- Длина и сортировка