如何在table中读取完整表格
2016-11-21 19:17:35
收藏:0
阅读:88
评论:2
如何在表格中读取完整的表格?
测试={}
测试[“你好”]=“世界”
测试[“tab”]={}
测试[“tab”][“example”]=“ex”
测试[“tab”][“whats”]=“up”
测试[“seta”]={}
测试[“seta”][“ask”]=“question”
测试[“seta”][“hard”]={}
测试[“seta”][“hard”][“cool”]=“lua”
这是我想读的一个例子表。我需要一个这样的内容表:
“test.Hello”“World”
“test.tab.example”“ex”
“test.tab.whats”“up”
“test.seta.ask”“question”
“test.seta.hard.cool”“lua”
左边是索引器,右边是内容。 有人有想法吗?我要读取的那个表也可以是
Thats[“a”][“very”][“big”][“table”]
或更大。谢谢你的回答。
点赞
用户1847592
## 将下面翻译成中文并且保留原本的 markdown 格式
```lua
local function f(r, t, p)
for k, v in pairs(t) do
if type(v) == "table" then
f(r, v, p..k..".")
else
r[p..k] = v
end
end
end
local result = {}
f(result, test, "test.")
定义了一个名为 f 的本地函数,接受三个参数 r、t 和 p。该函数使用 pairs 循环遍历 t 表中的所有键值对,如果当前键对应的值为表,则递归调用 f 函数。如果是其他类型的值,则将该键值对存入结果表 r 中,键为 p..k 的字符串。 p 参数在每次递归时被用来拼接当前键名,以便在结果表中区分不同层级的键名。
创建一个空表 result,并将其作为第一个参数传入 f 函数中,将需要处理的表 test 作为第二个参数传入,将初始键名前缀字符串 "test." 作为第三个参数传入。最终,result 表中会存储 test 表中所有键值对的拷贝,但键名都加了 "test." 前缀。
2016-11-21 19:31:56
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

首先,解决带有键字符串和键值的表的问题(即没有嵌套表):
function longkeys(object) local out = {} for key, value in pairs(object) do table.insert(out, {longkey = key, value = value}) end return out end for _, pair in pairs(longkeys(test)) do print("test." .. pair.longkey, pair.value) end这将正确地捕获“Hello”对应于“World”,但它将映射,例如,“tab”到“table: 00B6A488”。
我们可以修改“longkeys”函数以递归检查每当它是一个表时的“值”:
function longkeys(object) local out = {} for key, value in pairs(object) do if type(value) == "table" then local keysof = longkeys(value) for _, pair in pairs(keysof) do pair.longkey = key .. "." .. pair.longkey table.insert(out, pair) end else table.insert(out, {longkey = key, value = value}) end end return out end这依赖于观察这些“longkeys”的递归结构。 如果
s[k]是t,并且L是具有值v的t的“longkey”,那么k..“。”..L是具有值v的s的“longkey”。请注意,此解决方案假定表的结构完全是字符串键=>字符串值 |该形式的表。
这在其他数据类型或循环表中不起作用。
此外,请记住,该函数生成的“longkeys”不一定是用于获取值的有效Lua表达式。 考虑具有键的表:
local bad = { ["break"] = "break", ["i have a space"] = "space", ["i.have.dots"] = "dots", ["i\\have\"quotes"] = "quotes", }输出将给出
bad.break bad.i have a space bad.i.have.dots bad.i\have"quotes这些都不是访问“bad”表的有效方法。