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)

打印效果例如以下:

为了让程序模块调用该打印接口,打印函数前加上module("ccmlog", package.seeall),并将此文件保存在相似lualibs的库文件夹,然后在程序中用require "ccmlog"来调用该函数了.

时间: 2024-11-05 18:32:31

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("[

oracle 树状结构递归 PL/SQL输出控制 包括空格输出控制

树状结构 存储过程中通过递归构建,类似BBS回帖显示,代码共三段: 建表,插入数据,创建存储过程显示: 1.create table article(id number primary key,cont varchar2(4000),pid number,idleaf number(1), --0为非叶子节点,1为叶子节点alevel number(2)); 2. insert into article values(1,'蚂蚁大战大象',0,0,0);insert into article v

树 List Leaves 【用数组模拟了树状结构建树+搜索叶子节点+按照特殊规律输出每个叶子节点】

Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. Input Specification: Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number o

分享使用NPOI导出Excel树状结构的数据,如部门用户菜单权限

大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. 一个系统开发出来,系统要运行起来,很多数据要初始化,这个时候也是需要客户提供各种业务的基础数据.客户提供的数据中,其中除了word.pdf,最常见的就是Excel. 废话不多说,直接上图上代码: 如图, 左侧三列,作为 一个系统 所有菜单的树状结构. 其他列 以用户的信息(如用户名.登录名) 作为表

树状结构Java模型、层级关系Java模型、上下级关系Java模型与html页面展示

树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:parent_id) 三.Java模型 (我们把这张网撒在html的一张表里.其实用ul来展示会简单N多,自己思考为什么LZ会选择放在表里) private class Table {        private Long id; // 当前对象的id         private int x; /

PostgreSQL递归查询实现树状结构查询

在Postgresql的使用过程中发现了一个很有意思的功能,就是对于需要类似于树状结构的结果可以使用递归查询实现.比如说我们常用的公司部门这种数据结构,一般我们设计表结构的时候都是类似下面的SQL,其中parent_id为NULL时表示顶级节点,否则表示上级节点ID. CREATE TABLE DEPARTMENT ( ID INTEGER PRIMARY KEY, NAME VARCHAR(32), PARENT_ID INTEGER REFERENCES DEPARTMENT(ID) );

系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构

系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这个实体有关联关系. 3,每个实体中都有什么属性? 1,主键.推荐使用代理主键 2,关联关系属性.在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性.有几个端指向本类,本类中就有几个关联关系属性. 3,一般属性.分析所有有关的页面,找出表单中要填写的或是在显示页面中要显示的信息等.

Day03处理上级部门(树状结构)和用户管理

系统管理:部门管理-处理上级部门 添加或者修改时,上级部门的格式如图:.解决此功能将面临两个问题:1.将所有部门名称以下拉选的形式展示出来2.以树状结构展示.在此我们先解决问题1. 在添加页面中展示所有部门名称,并完成添加功能 DepartmentAction: public String addUI() throws Exception { //准备数据 List<Department> departmentList = departmentService.findAll(); Action

Android无限级树状结构

通过对ListView简单的扩展.再封装,即可实现无限层级的树控件TreeView. 1 package cn.asiontang.nleveltreelistview; 2 3 import android.annotation.TargetApi; 4 import android.content.Context; 5 import android.os.Build; 6 import android.util.AttributeSet; 7 import android.view.View