动态构建表格中的子表
2018-9-25 17:38:24
收藏:0
阅读:176
评论:3
我正在尝试想办法在lua表格内动态构建一系列子表。例如
function BuildsubTable()
local oTable = {}
local name = {"P1","P2"}
for i = 1, 2 do
oTable[i] = {name = name[i], "x" = i + 2, "y" = i + 1}
end
return oTable
end
期望输出结果:
oTable = {
{name = "P1", "x"=3, "y"=2},
{name = "P2", "x"=4, "y"=3}
}
很明显这个代码是不正确的,但你可以理解我想要做什么。这是一个非常简单的任务,但在LUA 5.3中却很困难。我找不到一个好的例子来构建这样的表格。欢迎提供任何解决方案或其他想法。在Python中,我会使用类或简单的字典。
点赞
用户4984564
你的问题在于你引用了字符串索引。在表构造器内声明表键的通用语法是[<key>] = <value>,例如[20] = 20或["x"] = i + 2。
对于合法变量名的字符串索引,你可以使用<key> = <value>来缩写["<key>"] = <value>,例如x = i + 2。
在你的代码中,你混合使用两种方式,写成了{..., "x" = i + 2, ...}。我快速搜索了一下 Python,你提到过它,看起来你把它和 Lua 混淆了?
编辑:我有点晚注意到这一点,但你也可以使用ipairs来迭代第一个表,使用table.insert来插入值:
function BuildsubTable()
local oTable = {}
local name = {"P1","P2"}
for i,name in ipairs(name) do
table.insert(oTable, {name = name, x = i + 2, y = i + 1})
end
return oTable
end
2018-09-25 17:33:01
用户5525442
以下是正确做法,由 DarkWiiPlayers 和 lhf 提供。但是如果您打算使用字符串作为键,则可以按如下方式修复当前代码:
function BuildsubTable()
local oTable = {}
local name = {"P1","P2"}
for i = 1, 2 do
oTable[i] = {name = name[i], ["x"] = i + 2, ["y"] = i + 1}
end
return oTable
end
输出
{
[1] = { ['name'] = 'P1', ['x'] = 3, ['y'] = 2},
[2] = { ['name'] = 'P2', ['x'] = 4, ['y'] = 3}
}
2018-09-26 02:59:29
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

使用
oTable [i] = {name = name [i],x = i + 2,y = i + 1}