🦊 FoxWiki

Таблицы

До сих пор каждая переменная хранила одно значение. Но что если нужно хранить список из 16 слотов инвентаря? Или координаты нескольких точек? Или настройки программы?

В Lua для этого существует одна универсальная структура данных — таблица.


Таблица как список (массив)

Самый простой вид таблицы — упорядоченный список значений:

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

Элементы нумеруются с 1 (не с 0, как в большинстве языков):

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

Изменить элемент:

Редактор Lua
1
2

Добавить в конец:

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

Длина таблицы-списка

Оператор # возвращает количество элементов:

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

Таблица как словарь (хэш-таблица)

Таблица может хранить пары "ключ — значение". Ключи не обязательно числа — это могут быть строки:

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

Добавить или изменить поле:

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

Вложенные таблицы

Таблицы могут содержать другие таблицы:

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

Таблица как набор настроек

Распространённый паттерн — хранить конфигурацию в таблице:

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

Полезные функции table.*

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

Инвентарь черепашки как таблица

Хороший пример применения — сканирование инвентаря:

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

🚀 Задания

Задание 1 Создай таблицу shopping с пятью продуктами и их ценами. Выведи каждый в формате "Товар: цена". Добавь новый товар через table.insert и выведи обновлённый список.

Задание 2 Создай таблицу robot с полями: name, fuelLevel, position (вложенная таблица с x, y, z), isActive. Выведи все данные в читаемом виде.

Задание 3 Напиши функцию countItems(inventory), которая принимает таблицу-инвентарь и возвращает общее количество предметов во всех слотах.

Задание 4 Создай таблицу-маршрут: список точек {x, y, z}. Напиши функцию totalDistance(route), которая считает суммарное расстояние между соседними точками (можно использовать math.abs по каждой оси).

Задание 5 Напиши функцию findInInventory(name), которая сканирует инвентарь черепашки и возвращает таблицу со всеми слотами, где есть предмет с указанным именем, и общим количеством этих предметов.

НазадСтроки
ДалееПеременные