微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LUA,解包嵌套表的所有层次结构并存储和返回具有相同层次结构的所有元素的表

如何解决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 举报,一经查实,本站将立刻删除。