Таблицы: списки и словари в одном типе
Складывать данные в таблицы, перебирать их и обновлять.
Теория
Таблица в Luau — и массив, и словарь одновременно. Если ключи — числа подряд, это список: {"меч", "щит"}. Если ключи — слова, это словарь: {coins = 100, level = 3}.
Перебор списка делают через ipairs, перебор словаря — через pairs. Порядок у pairs не гарантирован, и полагаться на него нельзя.
Длина списка — #items. Добавить в конец — table.insert, удалить — table.remove. Ключ, которого нет, возвращает nil, и на этом строится проверка «есть ли предмет».
- Индексы списка начинаются с 1, а не с нуля
- Таблицы можно вкладывать друг в друга сколько угодно
- Таблица передаётся по ссылке: изменил в функции — изменилось везде
- items[name] = nil удаляет ключ из словаря
Пример
Инвентарь как список и настройки игрока как словарь.
local inventory = { "меч", "щит", "зелье" }table.insert(inventory, "ключ")for index, item in ipairs(inventory) doprint(index .. ": " .. item)endlocal stats = {coins = 100,level = 3,}stats.coins += 25for key, value in pairs(stats) doprint(key, value)end
Задача
Собери таблицу с ценами трёх предметов. Напиши функцию, которая принимает название предмета и возвращает цену, а для неизвестного предмета — nil.
- Обращение к отсутствующему ключу и так вернёт nil — отдельная проверка не нужна
Показать решение
local PRICES = {sword = 100,shield = 150,potion = 25,}local function priceOf(item: string): number?return PRICES[item]endprint(priceOf("shield"))print(priceOf("rocket"))
Проверь себя
С какого индекса начинается список в Luau?
Показать ответ
В Luau списки начинаются с 1 — это отличает его от многих других языков.
Что вернёт stats["нет такого ключа"]?
Показать ответ
Отсутствующий ключ даёт nil, поэтому проверка «есть ли значение» пишется просто.