Урок 6 из 15

Таблицы: списки и словари в одном типе

Складывать данные в таблицы, перебирать их и обновлять.

Теория

Таблица в Luau — и массив, и словарь одновременно. Если ключи — числа подряд, это список: {"меч", "щит"}. Если ключи — слова, это словарь: {coins = 100, level = 3}.

Перебор списка делают через ipairs, перебор словаря — через pairs. Порядок у pairs не гарантирован, и полагаться на него нельзя.

Длина списка — #items. Добавить в конец — table.insert, удалить — table.remove. Ключ, которого нет, возвращает nil, и на этом строится проверка «есть ли предмет».

  • Индексы списка начинаются с 1, а не с нуля
  • Таблицы можно вкладывать друг в друга сколько угодно
  • Таблица передаётся по ссылке: изменил в функции — изменилось везде
  • items[name] = nil удаляет ключ из словаря

Пример

Инвентарь как список и настройки игрока как словарь.

ServerScriptService/Tables.lua
  1. local inventory = { "меч", "щит", "зелье" }
  2.  
  3. table.insert(inventory, "ключ")
  4.  
  5. for index, item in ipairs(inventory) do
  6. print(index .. ": " .. item)
  7. end
  8.  
  9. local stats = {
  10. coins = 100,
  11. level = 3,
  12. }
  13.  
  14. stats.coins += 25
  15.  
  16. for key, value in pairs(stats) do
  17. print(key, value)
  18. end

Задача

Собери таблицу с ценами трёх предметов. Напиши функцию, которая принимает название предмета и возвращает цену, а для неизвестного предмета — nil.

  • Обращение к отсутствующему ключу и так вернёт nil — отдельная проверка не нужна
Показать решение
ServerScriptService/Solution.lua
  1. local PRICES = {
  2. sword = 100,
  3. shield = 150,
  4. potion = 25,
  5. }
  6.  
  7. local function priceOf(item: string): number?
  8. return PRICES[item]
  9. end
  10.  
  11. print(priceOf("shield"))
  12. print(priceOf("rocket"))

Проверь себя

С какого индекса начинается список в Luau?

Показать ответ

В Luau списки начинаются с 1 — это отличает его от многих других языков.

Что вернёт stats["нет такого ключа"]?

Показать ответ

Отсутствующий ключ даёт nil, поэтому проверка «есть ли значение» пишется просто.