Перебор таблиц
Числовой for позволяет пройти по таблице-списку через индексы: for i = 1, #list. Но что если таблица — словарь с текстовыми ключами? Или смешанная структура? Для этого существуют специальные итераторы: ipairs и pairs.
ipairs — перебор списка по порядку
ipairs проходит по таблице начиная с индекса 1, по порядку, и останавливается на первом nil:
i — индекс, item — значение. Если имя переменной не нужно — используй _ как соглашение:
pairs — перебор всей таблицы
pairs обходит все ключи таблицы — и числовые, и строковые, в произвольном порядке:
Когда что использовать
| Итератор | Когда использовать |
|---|---|
ipairs | Таблица-список, нужен порядок, числовые ключи |
pairs | Словарь, смешанная таблица, все ключи |
for i = 1, #t | Список, нужен только числовой индекс, быстрее |
Практика: фильтрация
Практика: трансформация таблицы
Вложенные таблицы с pairs/ipairs
Изменение таблицы во время перебора
Удалять элементы из таблицы во время ipairs — опасно, можно пропустить элементы или попасть в непредсказуемое состояние. Безопаснее собирать что удалить и удалять после:
🚀 Задания
Задание 1
Создай список tasks из 5 строк-заданий. Через ipairs выведи каждое в формате "[1] Задание: текст". Затем добавь новое задание и выведи список снова.
Задание 2
Создай словарь settings с любыми пятью настройками (строки, числа, bool). Через pairs выведи каждую настройку в формате "ключ: значение (тип)", используя функцию type().
Задание 3
Используя ipairs, напиши функцию sum(numbers), которая принимает таблицу чисел и возвращает их сумму. Проверь на нескольких примерах.
Задание 4
Создай таблицу waypoints с тремя точками {name, x, y, z}. Через ipairs выведи их все. Найди точку с наименьшей координатой Y (самую глубокую).
Задание 5
Напиши функцию invertTable(t), которая принимает словарь и возвращает новый словарь где ключи и значения поменяны местами. Например, {a=1, b=2} → {[1]="a", [2]="b"}. Используй pairs.