从 table 中提取所有键和值
Extract all keys and values from a table
我有一个 table 是 json 解析器的结果,我想从中提取所有键和值 table 以及 tables 在里面。我该怎么做?
示例:
t = {
a = {
1,
b = {2, 3},
4,
},
c = {5, 6, 7}
}
result = extract(t) --result = a=(1, 4) b=(2, 3) c=(5, 6, 7)
您可以通过遍历 table 并为每个键收集一个辅助数组,其中包含所有不是 table 的值。如果一个值是 table 你重复这个过程直到你遍历了整棵树。
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, acc, 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,6,7}
由于遍历了树in-depth,table中较深的table值排在第一位。如果您想首先获得结果广度,则需要使用辅助列表 [1](这将为您提供 {a, c, b})。
我有一个 table 是 json 解析器的结果,我想从中提取所有键和值 table 以及 tables 在里面。我该怎么做?
示例:
t = {
a = {
1,
b = {2, 3},
4,
},
c = {5, 6, 7}
}
result = extract(t) --result = a=(1, 4) b=(2, 3) c=(5, 6, 7)
您可以通过遍历 table 并为每个键收集一个辅助数组,其中包含所有不是 table 的值。如果一个值是 table 你重复这个过程直到你遍历了整棵树。
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, acc, 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,6,7}
由于遍历了树in-depth,table中较深的table值排在第一位。如果您想首先获得结果广度,则需要使用辅助列表 [1](这将为您提供 {a, c, b})。