Lua中显示表格内容
我在尝试使用以下Lua代码来显示表格的内容。
local people = {
{
name = "Fred",
address = "16 Long Street",
phone = "123456"
},
{
name = "Wilma",
address = "16 Long Street",
phone = "123456"
},
{
name = "Barney",
address = "17 Long Street",
phone = "123457"
}
}
for k, v in pairs(people ) do
print(k, v)
end
我得到的输出是:
1 table: 0x9a2d8b0
2 table: 0x9a2d110
3 table: 0x9a2cb28
这个函数可以递归地序列化一个表。可以使用此代码的一种变体从表格生成JSON。
function tprint (tbl, indent)
if not indent then indent = 0 end
local toprint = string.rep(" ", indent) .. "{\r\n"
indent = indent + 2
for k, v in pairs(tbl) do
toprint = toprint .. string.rep(" ", indent)
if (type(k) == "number") then
toprint = toprint .. "[" .. k .. "] = "
elseif (type(k) == "string") then
toprint = toprint .. k .. "= "
end
if (type(v) == "number") then
toprint = toprint .. v .. ",\r\n"
elseif (type(v) == "string") then
toprint = toprint .. "\"" .. v .. "\",\r\n"
elseif (type(v) == "table") then
toprint = toprint .. tprint(v, indent + 2) .. ",\r\n"
else
toprint = toprint .. "\"" .. tostring(v) .. "\",\r\n"
end
end
toprint = toprint .. string.rep(" ", indent-2) .. "}"
return toprint
end
将表格式化输出:
local people = {
{
name = "Fred",
address = "16 Long Street",
phone = "123456"
},
{
name = "Wilma",
address = "16 Long Street",
phone = "123456"
},
{
name = "Barney",
address = "17 Long Street",
phone = "123457"
}
}
print (tprint(people))
将生成以下输出:
{
[1] = {
name= "Fred",
phone= "123456",
address= "16 Long Street",
},
[2] = {
name= "Wilma",
phone= "123456",
address= "16 Long Street",
},
[3] = {
name= "Barney",
phone= "123457",
address= "17 Long Street",
},
}
如果您的数据记录具有静态预定义的字段名称,则此更简单的版本可能适合您使用:
for i,t in ipairs(people) do
print('记录',i)
print('姓名',t.name)
print('地址',t.address)
print('电话',t.phone)
print()
end
我不确定你正在使用哪个IDE。但是无论出于何种原因,如果你和其他在使用Visual Studio Code的人们遇到相同的情况,那么Lua Debug extension将会非常好地展示你建立的自定义表中所有的键值对。
我喜欢这个扩展的原因,是你不仅可以显示你的初始值,而且如果你决定稍后更改一个值,你也可以通过这个扩展来进行更改,并通过“Debug Console”选项卡查看你的调整。
我使用了你的精确示例,只需在debug中键入"people",所有的值都可以显示出来。
解决方案1:py.repr https://github.com/waketzheng/luapy
$ wget https://raw.githubusercontent.com/waketzheng/luapy/main/python.lua
py=require('python')
> tab = { 1, 2, 3 }
> py.repr(tab)
[
1,
2,
3
]
> tab = { a=1, b=2, c=3 }
> py.repr(tab)
{
"c": 3,
"a": 1,
"b": 2
}
> tab = { a='a', b='b', c='c', d='d', e='e', f='f', g='g' }
> py.repr(tab)
{
"g": "g",
"a": "a",
"b": "b",
"c": "c",
"d": "d",
...
}
解决方案2:lu.prettystr https://luaunit.readthedocs.io/en/latest/#pretty-printing
$ wget https://raw.githubusercontent.com/bluebird75/luaunit/main/luaunit.lua
> lu = require('luaunit')
> t1 = {1,2,3}
> t1['toto'] = 'titi'
> t1.f = function () end
> t1.fa = (1 == 0)
> t1.tr = (1 == 1)
> print( lu.prettystr(t1) )
{1, 2, 3, f=function: 00635d68, fa=false, toto="titi", tr=true}
假設你的資料結構可被 JSON 序列化(就像上面的範例一樣),你可以使用 rxi / json.lua(MIT 許可證)來協助美化對象。只需將 json.lua 放入你的項目中,以下方式即可運作:
json = require "json"
for k, v in pairs(people) do
print(k, json.encode(v))
end
1 {"address":"16 Long Street","name":"Fred","phone":"123456"}
2 {"address":"16 Long Street","name":"Wilma","phone":"123456"}
3 {"address":"17 Long Street","name":"Barney","phone":"123457"}
- 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 代码?

要显示嵌套的表格,您将需要使用嵌套循环。
此外,使用
ipairs迭代 数组-样的表格,使用pairs迭代 记录-样的表格。local people = { { name = "Fred", address = "16 Long Street", phone = "123456" }, { name = "Wilma", address = "16 Long Street", phone = "123456" }, { name = "Barney", address = "17 Long Street", phone = "123457" } } for index, data in ipairs(people) do print(index) for key, value in pairs(data) do print('\t', key, value) end end输出: