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

Pau*_*aul 3 arrays lua nested key

自学 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
Run Code Online (Sandbox Code Playgroud)

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

for k, v in pairs (coupledNumbers) do
    print (k)
end
Run Code Online (Sandbox Code Playgroud)

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

for k, v in pairs (coupledNumbers) do
    print (v)
end
Run Code Online (Sandbox Code Playgroud)

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

我如何获得 ID 和结果。我认为这样的事情会起作用:

print (coupledNumbers[1].["ID"])
Run Code Online (Sandbox Code Playgroud)

或者

print (coupledNumbers[1].["result"])
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误。

Ped*_*ves 6

正如阿利斯特正确指出的那样,错误恰恰在于放入.[。但我想补充一点:点符号和括号符号可以做同样的事情,但情况并非总是如此。

我想补充的是,括号表示法允许您使用变量来引用字段。例如,如果您有以下作品:

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

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

print(getComponent(c, "yellow"))
Run Code Online (Sandbox Code Playgroud)

您根本无法使用点表示法来做到这一点。总是会返回以下内容nil

local function getComponent(color, component)
   return color.component
end
Run Code Online (Sandbox Code Playgroud)

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

所以,基本上,我想强调的是,如果您知道该字段,点表示法就可以,但是,如果可能有所不同,请使用括号。


All*_*ter 5

点符号和括号符号是不同的。您的错误是使用它们来索引一件事。( [1].["ID"]) 问题在于.[

点符号: Table.a.b

括号表示法: Table["a"]["b"]

如果你想混合它们,你可以做Table.a["b"]Table["a"].b

所以你想做类似coupledNumbers[1].IDcoupledNumbers[1]["ID"]

据我所知 edit: See Pedro's answer for information on the use of variables in dot notation.这实际上只是个人偏好,尽管您无法使用点表示法获得数组的第 n 个项目,因此您将始终使用[n]