LUA,打开嵌套表的所有层次结构,存储并返回具有相同层次结构中所有元素的表



我有一个嵌套数组,例如

someTable={"value1","value2",{"value 3a","value 3b",{"value 4a","Value 4b","值4c"}}

并试图找到一种方法,将不同层次的所有这些不同元素实际归结为一个单一层次的

预期结果,

newTable={"value1"、"value2"、"value3a"、"value 3b"、"Value 4a"、"估价师4b"、"值4c"}

我在下面的代码中发现了这一点,它实际上打印了所有这些元素,但我找不到一种方法将其制作成一个具有一个层次结构的新表,并返回

function DeepPrint (e)
-- if e is a table, we should iterate over its elements
if type(e) == "table" then
for k,v in pairs(e) do -- for every element in the table
print(k)
DeepPrint(v)       -- recursively repeat the same procedure
end
else -- if not, we can just print it
print(e)
end
end

我同意Doj的说法,但不需要两个函数
只需递归调用初始函数,就像您在上面的打印示例中所做的那样。

#! /usr/bin/env lua
someTable = {"value1", "value2", {"value3a", "value3b", {"value4a", "value4b", "value4c"}}}
function flatten( item, result )
local result = result or {}  --  create empty table, if none given during initialization
if type( item ) == 'table' then
for k, v in pairs( item ) do
flatten( v, result )
end
else
result[ #result +1 ] = item
end
return result
end
newTable = flatten( someTable )
for i = 1, #newTable do print( newTable[i] ) end

不打印元素,而是将它们插入结果表:

function flattenRecursive(e, result)
-- if e is a table, we should iterate over its elements
if type(e) == "table" then
for k,v in pairs(e) do -- for every element in the table
flattenRecursive(v, result) -- recursively repeat the same procedure
end
else -- if not, we can just put it to the result
table.insert(result, e)
end
end
function flatten (e)
local result = {}
flattenRecursive(e, result)
return result
end

测试:

example = {"value1", "value2", {"value3a", "value3b", {"value4a", "value4b", "value4c"}}}
example_result = flatten(example)
for k,v in pairs(example_result) do
print(v)
end

最新更新