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

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. Oracle自增列创建方法

    最近在做Oracle的项目,由于以前没有接触过Oracle的开发,遇到了不少的问题,比如给Oracle表添加自增列,与SQL Server就不同. Oracle没有自增字段这样的功能,但是通过触发器( ...

  2. java名词,关键字

    抽象类:规定一个或多个抽象方法的类别本身必须定义为abstract,抽象类只是用来派生子类,而不能用它来创建对象. final类:又称“最终类”,它只能用来创建对象,而不能被继承,与抽象类刚好相反,而 ...

  3. Oracle练习

    --声明一个变量,并给它赋值 declare  v_bonus number(8); begin select id*6 into v_bonus from A where Id=5; DBMS_OU ...

  4. POJ 3630 Phone List Trie题解

    Trie的应用题目. 本题有两个难点了: 1 动态建立Trie会超时,须要静态建立数组,然后构造树 2 推断的时候注意两种情况: 1) Tire树有133,然后插入13333556的时候.2)插入顺序 ...

  5. 该Tiled地图制作拿到项目~~这是偷懒,为了直接复制后写来

    1.现在,.h声明private: cocos2d::CCSprite* ninja; cocos2d::CCTMXTiledMap*  tileMap; 然后.cpp中增加tileMap = CCT ...

  6. Mac maven环境变量配置

    近期一直在学习使用Macbook,在这里记录一下全部遇到的问题 问题起源: 1.Macbook 安装了Eclipse,Eclipse装入插件maven & git , 可是在git中clone ...

  7. 第一章_servlet

    [Servlet与Jsp学习指南] *学习这servlet前.需要下载servlet-api.jar,MyEclipse给自己带来的需求javaEE3.0的天赋足以使用注解获得的版本号servlet ...

  8. Ubuntu 组态 Tomcat而每天的错误解决

    统环境:Ubuntu 14.10 安装版本号:apache-tomcat-7.0.54.tar.gz 安装步骤: 1.下载 Tomcat 下载 apache-tomcat-7.0.54.tar.gz ...

  9. jQuery Ajax: $.post请求示例

    jQuery Ajax: $.post请求示例 leyangjun.html页面 <html> <head> <meta http-equiv="Content ...

  10. paip.关于动画效果的原则 html js 框架总结

    paip.关于动画效果的原则 html js 框架总结 1. 动画框架的来源:flex,jqueryui 3 2. 特效的分类 3 2.1. Property effects 动态改变一个或多个目标对 ...