0Pricing
Lua Academy · Урок

Итерация с 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 — локальная установка не требуется.

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

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