如何解决从表中提取所有键和值
我有一个表是json解析器的结果,我想从该表以及其中的表中提取所有键和值。我该怎么办?
示例:
t = {
a = {
1,b = {2,3},4,},c = {5,6,7}
}
result = extract(t) --result = a=(1,4) b=(2,3) c=(5,7)
解决方法
您可以通过遍历表并为每个键收集一个包含所有非表值的辅助数组来做到这一点。如果值是表格,则重复该过程,直到遍历整棵树为止。
t = {
a = {
1,b = {2,3},4,},c = {5,6,7}
}
function rkeys(t,acc,name)
local ret = {}
for k,v in pairs(t) do
if type(v) ~= 'table' then
table.insert(ret,v)
else
rkeys(v,k)
end
end
if #ret > 0 then
table.insert(acc,{ [name] = ret })
end
end
function extract(t)
local ret = {}
rkeys(t,ret)
return ret
end
local result = extract(t)
for k,v in pairs(result) do
for k1,v1 in pairs(v) do
io.write(k1..": ") print("{"..table.concat(v1,",").."}")
end
end
结果:
b: {2,3}
a: {1,4}
c: {5,7}
由于深入遍历了树,因此表中较深的表值首先出现。如果您想首先获得结果的广度,则需要使用辅助列表[1](它将为您提供{a,c,b})。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。