Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua 提取所有键和值​;从桌子上_Lua_Lua Table - Fatal编程技术网

Lua 提取所有键和值​;从桌子上

Lua 提取所有键和值​;从桌子上,lua,lua-table,Lua,Lua Table,我有一个表,它是json解析器的结果,我想提取所有键和值​​从该表以及其中的表中。我该怎么做 例如: 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) 您可以通过遍历表并为每个键收集一个包含所有非表值的辅助数组来实现。如果某个值是一个表,则重复该过程,

我有一个表,它是json解析器的结果,我想提取所有键和值​​从该表以及其中的表中。我该怎么做

例如:

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)


您可以通过遍历表并为每个键收集一个包含所有非表值的辅助数组来实现。如果某个值是一个表,则重复该过程,直到遍历整个树为止

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}
因为树是深入遍历的,所以表中较深的表值首先出现。如果你想得到广度优先的结果,你需要使用一个辅助列表[1](它会给你{a,c,b})

[1]

您能否澄清一下,您想“展平”表格,使其不包含嵌套表格?