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

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"来调用该函数了.

lua 怎样输出树状结构的table?的更多相关文章

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

    树状结构 存储过程中通过递归构建,类似BBS回帖显示,代码共三段: 建表,插入数据,创建存储过程显示: 1.create table article(id number primary key,con ...

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

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...

  3. oracle存储过程删除树状结构的表数据

    今天在删除一个车辆品牌表的时候,遇到了一个问题,是在java的代码中做逻辑删除还是直接在Oracle中一次删除完成呢 思来想去觉得还是在sql里直接删除比较合适, 为什么呢? 第一,涉及数据库的读写操 ...

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

    树状结构Java模型.层级关系Java模型.上下级关系Java模型与html页面展示 一.业务原型:公司的组织结构.传销关系网 二.数据库模型 很简单,创建 id 与 pid 关系即可.(pid:pa ...

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

    大家都知道使用NPOI导出Excel格式数据 很简单,网上一搜,到处都有示例代码. 因为工作的关系,经常会有处理各种数据库数据的场景,其中处理Excel 数据导出,以备客户人员确认数据,场景很常见. ...

  6. 浅谈oracle树状结构层级查询测试数据

    浅谈oracle树状结构层级查询 oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中组织结构实现及其层次化实现功能也是经常遇到的,虽然我是一个java程序开发者,我一直觉得只 ...

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

    在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...

  8. 由简入繁实现Jquery树状结构

    在项目中,我们经常会需要一些树状结构的样式来显示层级结构等,比如下图的样式,之前在学.net的时候可以直接拖个服务端控件过来直接使用非常方便.但是利用Jquery的一些插件,也是可以实现这些效果的,比 ...

  9. php实现树状结构无级分类

    php实现树状结构无级分类   ).",'树2-1-1-2')";mysql_query($sql);?>

随机推荐

  1. jps查看java进程中哪个线程在消耗系统资源

    jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了.但值得一提的是jps命令是依赖于/tmp下的某些文件 的. 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无 ...

  2. leetcode第一刷_Convert Sorted List to Binary Search Tree

    好,二叉搜索树粉末登场,有关他的问题有这么几个,给你一个n,如何求全部的n个节点的二叉搜索树个数?能不能把全部的这些二叉搜索树打印出来? 这道题倒不用考虑这么多,直接转即可了,我用的思想是分治,每次找 ...

  3. POJ 1287 Networking(最小生成树)

    题意  给你n个点 m条边  求最小生成树的权 这是最裸的最小生成树了 #include<cstdio> #include<cstring> #include<algor ...

  4. 简介支持向量机热门(认识SVM三位置)

    支持向量机通俗导论(理解SVM的三层境地) 作者:July .致谢:pluskid.白石.JerryLead.出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector ...

  5. hibernate学习——Set集合配置

    Set集合的配置 数据表的创建:表关系一个员工拥有多个身份 create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VAR ...

  6. Three.js 3D打印数据模型文件(.STL)载入中

    3DPrint是现在和未来10年度科技产品的主流之中.广泛的. 对于电子商务类3D打印网站.一个主要功能就是商品3D呈现的方式,那是,3D数据可视化技术. HTML5(WebGL)它可以用于构建3D查 ...

  7. Keepalived 配置和使用

    keepalived主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现.keepalived主要目的在于,其自身启动一个服务,能够实现 ...

  8. Nagios监控生产环境redis群集服务战

    前言:     曾经做了cacti上展示redis性能报表图.能够看到redis的性能变化趋势图,可是还缺了实时报警通知的功能,如今补上这一环节. 在redis服务瓶颈或者异常时候即使报警通知,方便d ...

  9. poj 2253 Frogger (最长路中的最短路)

    链接:poj 2253 题意:给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过随意石头到达B, 问从A到B多条路径中的最长边中的最短距离 分析:这题是最短路的变形,曾经求的是路径总长的最 ...

  10. Codeforces 432 D. Prefixes and Suffixes

    用扩展KMP做简单省力..... D. Prefixes and Suffixes time limit per test 1 second memory limit per test 256 meg ...