You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:54:28