LUA, 解开所有嵌套表的层次结构并将所有元素存储和返回到相同的层次结构的表中

我有一个嵌套的数组,例如,

someTable = {"value1", "value2", {"value3a", "value3b", {"value4a", "value4b", "value4c"}}

并尝试找到一种方法使不同层次上的所有这些不同元素实际上降到一个单一的层次

期望结果,

newTable = {"value1", "value2", "value3a", "value3b", "value4a", "value4b", "value4c"}

我找到了下面的代码实际上打印了所有这些元素,但我找不到一种方法将其制成一个新表并返回它

function DeepPrint (e)
    -- 如果 e 是一个表,我们应该遍历它的元素
    if type(e) == "table" then
        for k,v in pairs(e) do -- 对于表中的每个元素
            print(k)
            DeepPrint(v)       -- 递归重复相同的过程
        end
    else -- 如果不是,我们可以直接打印它
        print(e)
    end
end
点赞
用户11695625
用户11695625

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

function flattenRecursive(e, result)
    -- 如果 e 是一个表,则需要迭代它的元素
    if type(e) == "table" then
        for k,v in pairs(e) do -- 对于表中的每个元素
            flattenRecursive(v, result) -- 递归地重复相同的过程
        end
    else -- 如果不是,我们可以直接放到结果中
        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
2021-05-14 18:13:48
用户3342050
用户3342050

我同意Doj所说的,但是你不需要两个函数来完成。

像你在上面的print示例中一样,只需递归调用初始函数即可。

#! /usr/bin/env lua
someTable = {"value1", "value2", {"value3a", "value3b", {"value4a", "value4b", "value4c"}}}

function flatten( item, result )
    local result = result or {}  --  如果在初始化时没有给出空表,则创建空表
    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
2021-05-14 19:01:12