Создание расширенной таблицы Lua - PullRequest
2 голосов
/ 18 июля 2011

Нужно создать таблицу, чтобы я мог получить от нее информацию следующим образом:

table[attacker][id]

И если я буду использовать

print(table[attacker][id])

Она должна напечатать value .

Перепробовал много способов, но ничего хорошего не нашел ...

Полагаю, что-то вроде этого ...

table.insert(table, attacker, [id] = value)

^ Это не работает.

Может ли кто-нибудь мне помочь?


Редактировать

Ну, когда я попробую это так:

x = {}
function xxx()
    if not x[attacker][cid] then
        x[attacker][cid] = value
    else
        x[attacker][cid] = x[attacker][cid] + value
    end
    print(x[attacker][cid])
end

Я получаю сообщение об ошибке:

попытка индексировать поле '?'(нулевое значение)

Ответы [ 3 ]

5 голосов
/ 18 июля 2011

Вам нужны фигурные скобки для создания внутренней таблицы:

table.insert(my_table, attacker, {[id]=value})

или

-- the advantage of this is that it works even if 'attacker' isn't a number
my_table[attacker] = {[id]=value}

a = 1
b = 2
c = 3
d = {}
table.insert(d, a, {[b]=c})
print(d[a][b]) -- prints '3'
2 голосов
/ 18 июля 2011

Что такое attacker?То есть какое значение оно содержит? на самом деле не имеет значения, что в нем содержится, поскольку таблицы Lua могут использовать любое значение Lua в качестве ключа.Но было бы полезно знать.

В любом случае, это действительно просто.

tableName = {}; --Note: your table CANNOT be called "table", as that table already exists as part of the Lua standard libraries.
tableName[attacker] = {}; --Create a table within the table.
tableName[attacker][id] = value; --put a value in the table within the table.

Проблема при редактировании произошла из-за того, что вы не приняли к сведению шаг 2выше.Значения в таблице Lua пусты (ноль), пока они не имеют значения.Следовательно, до строки 2 tableName[attacker] равно ноль .Вы не можете индексировать нулевое значение.Поэтому вы должны убедиться, что все ключи в tableName, которые вы ожидаете индексировать, являются таблицами фактов.

Другими словами, вы не можете сделать tableName[attacker][id], если не знать , что type(tableName[attacker]) == "table" верно.

1 голос
/ 19 ноября 2011

вы должны использовать table = {['key']='value'} облегчает.

...