Раздел: CronosPRO Дата редакции: 11.07.2013 id статьи: 1531

Создание таблиц в Lua. Работа с полями

Создать пустую таблицу можно следующим образом:
t = {}
Для доступа к полю таблицы используется запись вида:

имя_переменной[ключ]

t = {} -- создаем пустую таблицу
t[1] = "first" -- новое поле таблицы, с ключом 1 и значением "first"			
t[2] = 20 -- новое поле, с ключом 2 и значением 20
k = "name"
t[k] = "Jane" -- новое поле, с ключом "name" и значением "Jane"
a = t[1] -- переменная a получает значение "first"
b = t[2] -- переменная b получает значение 20
c = t["name"] -- переменная c получает значение "name"
В случае строковых ключей вместо записи t["name"] можно использовать запись t.name:
t.name = "name" -- эквивалентно t["name"] = "name"
a = t.name -- эквивалентно a = t["name"]

Обратите внимание

  • Выражение t.name не равнозначно t[name]. Первое выражение представляет поле таблицы, ключом которого является строка "name" (то есть эквивалентно t["name"]). Второе выражение представляет поле, ключом которого является значение переменной name. Различия между этими выражениями показаны в следующем примере:
    t = {}
    name = "somebody" 
    t[name] = "Jane" -- в поле "somebody" помещено значение "Jane"
    a = t[name] -- переменная a получает значение поля "somebody" ("Jane")
    b = t.name -- поля "name" не существует, переменная b получает nil
    c = t.somebody -- переменная c получает значение поля "somebody" ("Jane")
Если поля таблицы с заданным ключом не существует, обращение к нему дает nil:
t = {}
a = t.name -- переменная a получает значение nil
Для удаления поля таблицы достаточно присвоить ему nil:
t.second = nil
Таблицу можно заполнить значениями непосредственно при создании. Для этого в фигурных скобках следует перечислить ключи и значения элементов таблицы (в формате [ключ]=значение). Элементы отделяются друг от друга запятыми (,) или точками с запятой (;):
t = {["red"]="красный", ["green"]="зеленый", ["blue"]="синий"}
Приведённая запись эквивалентна следующему коду:
t = {}
t.red = "красный"; t.green = "зеленый"; t.blue = "синий"
В случае строковых ключей квадратные скобки (и двойные кавычки) можно не указывать:
t = {red="красный", green="зеленый", blue="синий"}
Если необходимо создать таблицу, поля которой также являются таблицами, это можно сделать следующим образом:
points = {
            a = {x=20, y=1}, 
            b = {x=40, y=2} 
         }
Приведённая запись эквивалентна следующему коду:
points = {}
p.a = {x=20, y=1}, 
p.b = {x=40, y=2}

Примечание