Lua 打印一个能输出table的函数

要求有一个table,里面有嵌套的table也能输出,输出后的代码复制到程序中运行也不报错

例如给出的table如下:

local pets = {
  ["cat"] = {
    ["count"] = 1,
    ["names"] = {
    "2", 
    "3",
    },
  },
  ["dog"] = {
    ["count"] = 20,
    ["names"] = {
    "233", 
    "34",
    },
  },
}

下面是我贴出的代码,注释方面是我自己的理解可能有点乱

测试table如下:

运行结果如下:

将运行结果带入原table中,程序输出一样未报错。

以下是源代码:

local key = ""

function PrintTable(table, level)      --table是表名,level是嵌套表的层级
    level = level or 1                   --层级不为nil则返回层级,最少为1
    local suo_Jin = ""                    --缩进
    --每一个层级缩进两格
    for i = 1, level do
        suo_Jin = suo_Jin.."  "
    end    
    --遇到不为空字符串
    if key ~= "" then
        --if level == 1
        print(suo_Jin.."[".."\""..key.."\"".."]".." ".." = ".." ".."{")
    --遇到空的字符串
    else
        print(suo_Jin.."{")
    end
    key = ""
 
    for k, v in pairs(table) do
        --如果是嵌套的table
        if type(v) == "table" then            
            key = k
            PrintTable(v, level + 1)
            --在判断是不是string类型
            elseif type(v) == "string" then
                local value = string.format("%s\"%s\",", suo_Jin.."  ", tostring(v))
                print(value)
                --index = index + 1
        --不是嵌套的table
        else
            --让三个量按照给定的格式输出
            local value = string.format("%s".."[".."\"".."%s".."\"".."]".." = ".."%s" , suo_Jin .. "  ", tostring(k), tostring(v).." ,")
            print(value)
            --index = index + 1
        end            
    end
    --先打印一下level的值,用level来判断是不是table最后一个值
    --print("2222222222222222222  level = " .. level)
    if level ~= 1 then
        print(suo_Jin.."},")
    else
        print(suo_Jin.."}")
    end
    
end


local pets = {
  ["cat"] = {
    ["count"] = 1,
    ["names"] = {
    "2", 
    "3",
    },
  },
  ["dog"] = {
    ["count"] = 20,
    ["names"] = {
    "233", 
    "34",
    },
  },
}

PrintTable(pets)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值