Итерация с ipairs
Перебирайте последовательности по порядку.
«Итерация с ipairs» — бесплатный урок Lua Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Зачем нужен ipairs
Перебор последовательности по индексам работает, но ipairs делает код более чистым и безопасным. Он передаёт вам каждый индекс и значение по порядку.
Перебор начинается с индекса 1 и останавливается на первом nil, поэтому идеально подходит для последовательностей без пропусков.
local fruits = {"apple", "banana", "cherry"}
for i, v in ipairs(fruits) do
print(i, v)
endСтруктура цикла
Шаблон выглядит так: for index, value in ipairs(t) do ... end.
На каждом шаге index — это позиция с индексацией от 1, а value — находящийся в ней элемент. Вручную считать индексы не нужно.
local colors = {"red", "green", "blue"}
for i, c in ipairs(colors) do
print("Color", i, "is", c)
endИгнорирование индекса
Если нужны только значения, по соглашению назовите индекс _, чтобы показать, что он не используется.
Цикл всё равно посещает элементы по порядку, начиная с индекса 1.
local nums = {10, 20, 30}
local total = 0
for _, n in ipairs(nums) do
total = total + n
end
print("sum:", total)Начинает с 1 и останавливается на пропуске
ipairs начинает с индекса 1 и продолжает работу, пока следующий индекс содержит значение, отличное от nil.
Если встречается пропуск, перебор останавливается. Поэтому ipairs предназначен для правильных последовательностей, а не для таблиц с отсутствующими позициями.
local t = {"a", "b", nil, "d"}
for i, v in ipairs(t) do
print(i, v)
endСуммирование значений
Частая задача — свести список к одному числу, например вычислить сумму или максимум.
ipairs делает такой код понятным: посетите каждое значение и накапливайте результат.
local prices = {3, 7, 2, 9}
local max = prices[1]
for _, p in ipairs(prices) do
if p > max then max = p end
end
print("max:", max)Создание нового списка
Объедините ipairs с table.insert, чтобы преобразовать одну последовательность в другую.
Здесь мы удваиваем каждое число и помещаем результат в новую таблицу, сохраняя порядок и индексы, начинающиеся с 1.
local src = {1, 2, 3}
local doubled = {}
for _, n in ipairs(src) do
table.insert(doubled, n * 2)
end
print(doubled[1], doubled[2], doubled[3])ipairs и pairs
pairs обходит все ключи, включая строковые, без гарантированного порядка. ipairs обходит только целочисленную последовательность 1, 2, 3... по порядку.
Для упорядоченных массивов используйте ipairs.
local t = {"x", "y"}
t.name = "extra"
for i, v in ipairs(t) do
print(i, v)
endФильтрация по условию
Используйте if внутри цикла, чтобы оставить только подходящие элементы.
Ниже мы собираем слова длиной более трёх букв в новую последовательность.
local words = {"hi", "hello", "yo", "howdy"}
local long = {}
for _, w in ipairs(words) do
if #w > 3 then table.insert(long, w) end
end
print(long[1], long[2])Поиск элемента
Чтобы выполнить поиск, перебирайте элементы с помощью ipairs и остановитесь, когда найдёте нужный. Индекс показывает позицию, начиная с 1.
Мы выходим из цикла досрочно с помощью break, как только появляется искомый элемент.
local names = {"Ann", "Bob", "Cy"}
local found = 0
for i, n in ipairs(names) do
if n == "Bob" then found = i break end
end
print("Bob at index", found)Подсчёт во время перебора
Вы можете подсчитывать совпадения, увеличивая переменную внутри цикла.
Такой подход позволяет не обращаться к индексам напрямую и при этом просканировать всю последовательность.
local marks = {5, 8, 3, 9, 6}
local passes = 0
for _, m in ipairs(marks) do
if m >= 6 then passes = passes + 1 end
end
print("passing:", passes)Вложенные ipairs
Для таблицы таблиц вложите два цикла ipairs, чтобы посетить каждую ячейку.
Внешний цикл проходит по строкам, а внутренний — по столбцам, в обоих случаях начиная с 1.
local grid = {{1, 2}, {3, 4}}
for _, row in ipairs(grid) do
for _, cell in ipairs(row) do
print(cell)
end
endБыстрая проверка
Вспомните, где начинается и заканчивается ipairs.
Повторение
Вы изучили шаблон for i, v in ipairs(t): он обходит последовательность по порядку, начиная с индекса 1, и останавливается на первом пропуске.
Используйте его, чтобы складывать элементы, фильтровать, искать и преобразовывать списки. Далее вы научитесь измерять длину с помощью # и упорядочивать элементы с помощью table.sort.
Часто задаваемые вопросы
Урок «Итерация с ipairs» бесплатный?
Да — полный текст урока «Итерация с ipairs» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Итерация с ipairs»?
Перебирайте последовательности по порядку. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Итерация с ipairs»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Массивы как таблицы
- Добавление и удаление элементов
- Итерация с ipairs
- Длина и сортировка