🦊 FoxWiki

Перебор таблиц

Числовой for позволяет пройти по таблице-списку через индексы: for i = 1, #list. Но что если таблица — словарь с текстовыми ключами? Или смешанная структура? Для этого существуют специальные итераторы: ipairs и pairs.


ipairs — перебор списка по порядку

ipairs проходит по таблице начиная с индекса 1, по порядку, и останавливается на первом nil:

Редактор Lua
1
2
3
4
5
6
7
8
9

i — индекс, item — значение. Если имя переменной не нужно — используй _ как соглашение:

Редактор Lua
1
2
3

pairs — перебор всей таблицы

pairs обходит все ключи таблицы — и числовые, и строковые, в произвольном порядке:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11

Когда что использовать

ИтераторКогда использовать
ipairsТаблица-список, нужен порядок, числовые ключи
pairsСловарь, смешанная таблица, все ключи
for i = 1, #tСписок, нужен только числовой индекс, быстрее

Практика: фильтрация

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Практика: трансформация таблицы

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11

Вложенные таблицы с pairs/ipairs

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12

Изменение таблицы во время перебора

Удалять элементы из таблицы во время ipairs — опасно, можно пропустить элементы или попасть в непредсказуемое состояние. Безопаснее собирать что удалить и удалять после:

Редактор Lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

🚀 Задания

Задание 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.

НазадЦикл for
ДалееФункции