Lua- 迭代嵌套表
我已经学习 Lua 几个星期了,但是每次都遇到一个难点。 我尝试阅读这个主题的帖子和书籍。
我使用 Lua 查询软件监控系统(Nimsoft),我的数据以表格形式返回给我。
我不会发布整个输出,但是这里是一个我认为可以描述结构的片段:
表引用为 "h_resp"
`` ` root: domain:nevil-nmsdom robotlist: 1: ssl_mode:0 os_user2: origin:nevil-nmshub os_major:UNIX ip:192.168.1.58 os_minor:Linux addr:/nevil-nmsdom/nevil-nmshub/nevil-multibot_03 status:0 license:1 last_inst_change:1340754931 created:1341306789 offline:0 last_change:1341306869 lastupdate:1344522976 autoremove:0 os_user1: flags:1 os_description:Linux 2.6.32-5-amd64 #1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 name:nevil-multibot_03 metric_id:M64FB142FE77606C2E924DD91FFCC3BB4 device_id:DDFF83AB8CD8BC99B88221524F9320D22 heartbeat:900 port:48100 version:5.52 Dec 29 2011 2:等等...
`` `
我使用在此论坛上找到的 tdump 函数来实现此目的。
`` ` for k,v in pairs(h_resp)do print(k ..“ ”v) end
`` `
给我顶部,我明白这一点。
`` ` domain nevil-nmsdom robotlist table:0x22136a0
`` `
然后我尝试获取“ robotlist”
`` ` for k,v in pairs(h_resp.robotlist)do print(k ..“ ”v) end
`` `
如下所示,索引是整数,值是另一个表。
`` ` 1 表:0x237e530 0 表:0x22112a0 3 表:0x2211460 2 表:0x2392ee0 5 表:0x2213e80 4 表:0x22130e0 7 表:0x2283b80 6 表:0x2283ff0 8 表:0x22a71e0
`` `
我还明白我可以使用以下内容之一来解决其中一个“嵌套”表格的问题:
`` ` for k,v in pairs(h_resp.robotlist [“0”])do print(k ..“ ”v) end
ssl_mode 0 os_user2 origin network os_major UNIX ip 192.168.1.31 os_minor Linux addr /nevil-nmsdom/nevil-nmshub/nevil-mysql status 0 ...等待等待...
`` `
至于我的观点,我无法弄清楚如何要求 Lua 迭代存储在 robotlist 中的所有表。
其次,我为冗长的电子邮件道歉,但我仍在努力学习/理解这一点……我没有先前的编程/脚本编写经验。
谢谢
@Bartek Banachewicz 的解答对我帮助很大。然而,我确实需要改变代码的顺序才能让它工作。我的代码显然与下面的代码不同,但是使用与上面相同的思路对我很有效。
请注意,我需要将if-else块移到迭代块内部,并检查类型v。
function DeepPrint (e)
-- 如果e是一个表,我们应该遍历它的元素
for k,v in pairs(e) do -- 对于表中的每个元素
if type(v) == "table" then
print(k)
DeepPrint(v) -- 递归重复相同的过程
else -- 否则,我们只需要打印它
//EDIT: print(v .. k)
end
end
end
感谢您的指导。
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
如果你想要打印表格列表,然后是每个表格的内部,然后再次(就像在inception中一样),最简单的方法就是使用递归。
您需要检查您正在查看的表的当前元素的类型:
function DeepPrint (e) -- 如果e是一个表格,我们应该遍历它的元素 if type(e) == "table" then for k,v in pairs(e) do -- 遍历表中的每个元素 print(k) DeepPrint(v) -- 递归重复相同的过程 end else -- 如果不是,我们就可以直接打印它 print(e) end end您应该查看Lua手册,一切都在那里解释。//编辑:我应该更清楚一点;手册中有一个与上面非常相似的函数部分。