2

需要创建一些表,以便我可以通过这种方式从中获取信息:

table[attacker][id]

如果我用

print(table[attacker][id])

它应该打印

尝试了很多方法,但没有找到任何好的...

我想它应该是这样的......

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

我收到一条错误消息:

尝试索引字段“?” (零值)

4

3 回答 3

5

您需要花括号来创建内表:

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'
于 2011-07-18T07:24:58.677 回答
2

是什么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 表中的值在有值之前是空的(nil)。因此,直到第 2 行,tableName[attacker]nil。你不能索引一个 nil 值。因此,您必须确保tableName您希望索引到的任何键都是事实表。

tableName[attacker][id]换句话说,除非你知道type(tableName[attacker]) == "table"是真的,否则你不能做。

于 2011-07-18T07:26:05.277 回答
1

你应该使用table = {['key']='value'}使它更容易。

于 2011-11-19T16:39:47.983 回答