创建 Lua 高级表格

需要创建一些表格以便以这种方式获取其中的信息:

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

我收到了一个错误信息:

attempt to index field '?' (a nil value)

原文链接 https://stackoverflow.com/questions/6729757

点赞
stackoverflow用户148870
stackoverflow用户148870

在创建内部表的时候需要使用大括号:

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

或者

-- 这个方法的好处是即使 'attacker' 不是一个数字也会有效
my_table[attacker] = {[id]=value}

a = 1
b = 2
c = 3
d = {}
table.insert(d, a, {[b]=c})
print(d[a][b]) -- 输出 '3'
2011-07-18 07:24:58
stackoverflow用户734069
stackoverflow用户734069

attacker 是什么?那就是它包含了什么值? 由于 Lua 表可以使用任何 Lua 值作为键,因此实际上它包含的值并不重要。但是了解它会很有用。

无论如何,非常简单。

tableName = {}; --注意:你的表不能叫"table",因为该表已经存在于 Lua 标准库中。
tableName[attacker] = {}; --在表中创建另一个表。
tableName[attacker][id] = value; --在另一个表中添加值。

在你的编辑中出现问题是因为你没有注意上述第二步。Lua 表中的值在没有赋值前是空的(nil)。因此,在第二行之前,tableName[attacker] 就是 nil。无法索引空值。因此,必须确保在 tableName 中任何索引的键都是表。

换句话说,除非你确定 type(tableName[attacker]) == "table",否则你不能执行 tableName[attacker][id]

2011-07-18 07:26:05
stackoverflow用户837969
stackoverflow用户837969

你应该使用table = {['key']='value'}使得其更加易于操作。

2011-11-19 16:39:47