了解如何在 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"])
但是它会出现错误的。
正如 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 的字段(在这个模型中是不存在的)。
所以,基本上,我想强调的是,如果你知道字段名称,使用点表示法就可以了,但如果该字段名称可能会变化,使用方括号。
从 L ua 5.3参考手册 - 3.2 变量:
方括号用于对表进行索引:
var ::= prefixexp ‘[’ exp ‘]’句法
var.Name只是语法糖,等价于var["Name"]:
var ::= prefixexp ‘.’ Name
只有当您的表键是文字字符串时,才能使用点记法来索引表值。后跟点运算符的 [ 对 Lua 解释器没有意义,因为它期望一个文字字符串。
将coupledNumbers[1].["ID"]替换为coupledNumbers[1].ID。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

点号表示法和方括号表示法是不同的。你的错误在于尝试同时使用它们来索引一个东西 (
[1].["ID"])。问题出在.[上点号表示法:
表格.字段A.字段B方括号表示法:
表格["字段A"]["字段B"]如果你想混合使用它们,你可以这样:
表格.字段A["字段B"]或表格["字段A"].字段B所以你想做的应该是
coupledNumbers[1].ID或coupledNumbers[1]["ID"]我认为这真的只是个人喜好。尽管使用点号表示法无法获取数组中的第 n 项,所以你总是需要使用
[n]来索引一个数字。编辑:关于在点号表示法中使用变量,请参见 Pedro 的答案。