如何解决LUA,解包嵌套表的所有层次结构并存储和返回具有相同层次结构的所有元素的表
soMetable = {"value1","value2",{"value3a","value3b",{"value4a","value4b","value4c"}}
并试图找到一种方法让所有这些不同层次的不同元素实际上归结为一个层次
预期结果,
newTable = {"value1","value3a","value4a","value4c"}
我在下面的代码中发现了实际打印所有这些元素的代码,但我找不到一种方法将其放入具有一个层次结构的新表中并返回
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","value4c"}}}
example_result = flatten(example)
for k,v in pairs(example_result) do
print(v)
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。