了解如何在 lua 中访问表数组中的值

正在自学 lua,并尝试弄清楚如何在具有数组的嵌套表中访问键和值。 例如,如果我有以下表格:

local coupledNumbers = {}
local a = 10
for i = 1, 12 do
    for j = 1, 12 do
        table.insert(coupledNumbers, {ID = a, result = i*j})
        a = a + 10
    end
end

这个循环会给我键(1到144)

for k, v in pairs (coupledNumbers) do
    print (k)
end

这个循环会给我值(类似于:table:0xc475fce7d82c60ea)

for k, v in pairs (coupledNumbers) do
    print (v)
end

我的问题是如何进入表内的值?

如何获取 ID 和 result。我以为像这样会起作用:

print (coupledNumbers[1].["ID"])

print (coupledNumbers[1].["result"])

但是它会出现错误的。

点赞
用户12514997
用户12514997

点号表示法和方括号表示法是不同的。你的错误在于尝试同时使用它们来索引一个东西 ([1].["ID"])。问题出在 .[

点号表示法:表格.字段A.字段B

方括号表示法:表格["字段A"]["字段B"]

如果你想混合使用它们,你可以这样:表格.字段A["字段B"]表格["字段A"].字段B

所以你想做的应该是 coupledNumbers[1].IDcoupledNumbers[1]["ID"]

我认为这真的只是个人喜好。尽管使用点号表示法无法获取数组中的第 n 项,所以你总是需要使用 [n] 来索引一个数字。 编辑:关于在点号表示法中使用变量,请参见 Pedro 的答案。

2020-01-16 06:05:53
用户6487283
用户6487283

正如 Allister 所说的那样,错误正是在于使用了 .[。但是我想补充一些内容:点表示法和方括号表示法是可以实现同样的功能的,但并不总是如此。

我想要补充的是,方括号表示法允许你使用变量来引用字段。例如,如果你有以下代码片段:

local function getComponent(color, component)
   return color[component]
end

local c = {
   cyan = 0,
   magenta = 11,
   yellow = 99,
   black = 0
}

print(getComponent(c, "yellow"))

你简单地不能使用点表示法来实现这一点。以下代码始终会返回 nil

local function getComponent(color, component)
   return color.component
end

这是因为它会搜索 color 中名为 component 的字段(在这个模型中是不存在的)。

所以,基本上,我想强调的是,如果你知道字段名称,使用点表示法就可以了,但如果该字段名称可能会变化,使用方括号。

2020-01-16 06:29:31
用户2858170
用户2858170

从 L ua 5.3参考手册 - 3.2 变量

方括号用于对表进行索引:

var ::= prefixexp ‘[’ exp ‘]’

句法 var.Name 只是语法糖,等价于 var["Name"]

var ::= prefixexp ‘.’ Name

只有当您的表键是文字字符串时,才能使用点记法来索引表值。后跟点运算符的 [ 对 Lua 解释器没有意义,因为它期望一个文字字符串。

coupledNumbers[1].["ID"]替换为coupledNumbers[1].ID

2020-01-16 06:56:16