如何在Lua中使用递归打印嵌套table?
用递归实现Lua嵌套Table的深度打印
原代码通过嵌套for循环处理单层嵌套的table,我们可以用递归重构代码,消除重复逻辑的同时支持更深层次的嵌套结构:
原代码:
local t = {x=0, y=5, other={10,10,10,11}} function DeepPrint (t) local request_headers_all = "" for k, v in pairs(t) do if type(v) == "table" then for k1, v1 in pairs(v) do local rowtext = "" rowtext = string.format("[%s %s] ",k, v1) request_headers_all = request_headers_all .. rowtext end else local rowtext = "" rowtext = string.format("[%s %s] ", k, v) request_headers_all = request_headers_all .. rowtext end end return request_headers_all end print(DeepPrint (t))
修改后的递归版本:
local t = {x=0, y=5, other={10,10,10,11}} function DeepPrint(t, parentKey) local result = "" for k, v in pairs(t) do -- 确定当前使用的键:存在父键时用父键,否则用当前键 local currentKey = parentKey or k if type(v) == "table" then -- 递归处理子table,传递当前键作为父键 result = result .. DeepPrint(v, currentKey) else -- 非table值直接格式化拼接 result = result .. string.format("[%s %s] ", currentKey, v) end end return result end print(DeepPrint(t))
核心逻辑说明
- 新增
parentKey参数,用于传递上层table的键,确保子table的元素都以上层键作为标识输出 - 遇到table类型的值时,递归调用自身处理,无需手动写多层for循环,代码更简洁且支持任意深度的嵌套
- 输出顺序由
pairs遍历table的顺序决定,满足题目中“顺序无关”的要求
期望输出(顺序无关):
[y 5] [x 0] [other 10] [other 10] [other 10] [other 11]
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

