如何通过索引从 lua 中的嵌套 table 获取值?

How do I get a value by index from a nested table in lua?

我一直在用 LOVE2D 游戏引擎制作游戏,我偶然发现了一个问题。我想访问嵌套 table 中的变量,但我不知道如何访问。

这是我现在的代码:

local roomNum = 1
local rooms = { r1 = { complete = false, name = "Room 1" }

if rooms[roomNum].complete == true then --problematic line
    --do stuff
end

如果我用 rooms.r1.complete 替换 rooms[roomNum].complete 那么它就可以了。

如有任何帮助,我们将不胜感激!

'http://lua-users.org/wiki/TablesTutorial'

所提供的 link 在 Lua 中的表格中提供了易于理解的示例,因此它可能在将来证明是有用的资源。

至于替换代码起作用的原因,字典只是 key/value 对 (kvp) 的集合。在其他语言的示例中,这些对通常显示为类似 KeyValuePair 的内容。

在您的例子中,您使用的是字典使用方式的变体。如您所见,您可以使用像 room[1] 这样的编号索引,也可以使用像 room["kitchen"] 这样的字符串。当您提供一组数据来初始化字典时,它会变得很有趣。

根据提供的数据,您有以下内容:

local rooms = { r1 = { complete = false, name = "Room 1" } 

r1 相当于在没有数据集的情况下使用 rooms["r1"]。在提供数据集时,可以引用任何 "named" 键,就像它是字典的 属性 一样(想想 类 和 public getter/setter)。对于数据集的命名键,您也可以提供数字键。

local rooms = { [1] = { complete = false, name = "Room 1" }

此索引符合您提供房间索引的方向。因此,您可以将数据集交换为使用整数而不是 r1、r2 等,或者您可以连接 r 和索引编号。这完全取决于你。请记住,当您进一步向下嵌套时,同样的规则适用。因此,complete 可能看起来像 rooms[1].complete、rooms["r1" ].complete 或 rooms.r1.complete.