举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > lua 输出table Lua 如何输出树状结构的table?

lua 输出table Lua 如何输出树状结构的table?

2023-04-09 11:31 Lua教程

lua 输出table Lua 如何输出树状结构的table?

lua 输出table Lua 如何输出树状结构的table?

lua 输出table

为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据。

ccmlog.lua

local function __tostring(value, indent, vmap)
    local str = ""
    indent = indent or ""
    vmap = vmap or {}

    --递归结束条件
    if (type(value) ~= "table") then
        if (type(value) == "string") then
            --字符串
            str = string.format("[[%s]]", value)
        else
            --整数
            str = tostring(value)
        end
    else
        if type(vmap) == "table" then
            if vmap[value] then return "("..tostring(value)..")" end
            vmap[value] = true
        end

        local auxTable = {}     --保存元表KEY(非整数)
        local iauxTable = {}    --保存元表value
        local iiauxTable = {}   --保存数组(key为0)
        table.foreach(value, function(i, v)
            if type(i) == "number" then
                if i == 0 then
                    table.insert(iiauxTable, i)
                else
                    table.insert(iauxTable, i)
                end
            elseif type(i) ~= "table" then
                table.insert(auxTable, i)
            end
        end)
        table.sort(iauxTable)

        str = str.."{n"
        local separator = ""
        local entry = "n"
        local barray = true
        local kk,vv
        table.foreachi (iauxTable, function (i, k)
            if i == k and barray then
                entry = __tostring(value[k], indent.."  t", vmap)
                str = str..separator..indent.."  t"..entry
                separator = ", n"
            else
                barray = false
                table.insert(iiauxTable, k)
            end
        end)
        table.sort(iiauxTable)

        table.foreachi (iiauxTable, function (i, fieldName)

            kk = tostring(fieldName)
            if type(fieldName) == "number" then 
                kk = "["..kk.."]"
            end 
            entry = kk .. " = " .. __tostring(value[fieldName],indent.."  t",vmap)

            str = str..separator..indent.."  t"..entry
            separator = ", n"
        end)
        table.sort(auxTable)

        table.foreachi (auxTable, function (i, fieldName)

            kk = tostring(fieldName)
            if type(fieldName) == "number" then 
                kk = "["..kk.."]"
            end 
            vv = value[fieldName]
            entry = kk .. " = " .. __tostring(value[fieldName],indent.."  t",vmap)

            str = str..separator..indent.."  t"..entry
            separator = ", n"
        end)

        str = str.."n"..indent.."}"
    end

    return str
end

ccmlog = function(m,fmt,...)
    local args = {...}
    for k,arg in ipairs(args) do
        if type(arg) == "table" 
            or type(arg) == "boolean" 
            or type(arg) == "function" 
            or type(arg) == "userdata" then
            args[k] = __tostring(arg)
        end
    end

    args[#args+1] = "nil"
    args[#args+1] = "nil"
    args[#args+1] = "nil"
    local str = string.format("[%s]:"..fmt.." %s", m, unpack(args))
    print(str)

    local off = 1
    local p = CCLOGWARN 
    if m == "error" then 
        p = CCLOGERROR 
    elseif m == "warn" then 
        p = CCLOGWARN
    end
    while off <= #str do 
        local subStr = string.sub(str, off, off+1024)
        off = off + #subStr
        --p(subStr)
    end
end

--打印测试
reserved =  { [100] = { 300, 400}, 200, { 300, 500}, abc = "abc",[0] = {1,2,3,"abc"}}

ccmlog("d","d",reserved)

打印效果如下:

20140813223537273


阅读全文
以上是鳄鱼CMS为你收集整理的lua 输出table Lua 如何输出树状结构的table?全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  Ruby JSON

    Ruby JSON

    2023-05-10 Ruby教程

    本章节我们将为大家介绍如何使用 Ruby 语言来编码和解码 JSON 对象。 环境配置 在使用 Ruby 编码或解码 JSON 数据前,我们需要先...

  • r语言字符串处理 R语言 字符串

    r语言字符串处理 R语言 字符串

    2023-04-17 R语言教程

    在R语言中的单引号或双引号对中写入的任何值都被视为字符串。 R语言存储的每个字符串都在双引号内,即使是使用单引号创建的依旧...

  • kotlin接口回调 Kotlin 接口

    kotlin接口回调 Kotlin 接口

    2023-05-09 Kotlin教程

    Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现:interface MyInterface {fun bar() // 未实现...

  • kotlin委托属性一篇就够了 kotlin 委托

    kotlin委托属性一篇就够了 kotlin 委托

    2023-05-20 Kotlin教程

    委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象...

  • go错误处理最佳实践 Go 错误处理

    go错误处理最佳实践 Go 错误处理

    2023-06-13 Go教程

    Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型,这是它的定义:type error interface {Err...

© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们