一.打印table

 function PrintTable(tb)
if type(tb) ~= "table" then
print(tb)
return
end local level =
local content = "" local function GetSpace(level)
local spaceStr = ""
for i=,level do
spaceStr = spaceStr .. " "
end
return spaceStr
end local function GetString(value)
if type(value) ~= "string" then
return tostring(value)
else
return "\"" .. tostring(value) .. "\""
end
end local function PrintTb(tb, level)
level = level + for k,v in pairs(tb) do
if type(k) == "table" then
content = content .. "\n" .. GetSpace(level) .. "{"
PrintTb(k, level)
content = content .. "\n" .. GetSpace(level) .. "} = "
else
content = content .. "\n" .. GetSpace(level) .. GetString(k) .. " = "
end if type(v) == "table" then
content = content .. "{"
PrintTb(v, level)
content = content .. "\n" .. GetSpace(level) .. "}"
else
content = content .. GetString(v)
end
end
end PrintTb(tb, level)
print("{" .. content .. "\n}")
end

测试1(嵌套table):

 local x =
{
{
a = {
b =
},
"asd",
},
"",
{
["c"] = ,
[] = ,
},
}

输出:

测试2(key和value都是table):

 local a = {, [] = , ""}
local b = {a1 = "a1"}
local c = {}
c[a] =
c[b] = {b1 = }

输出:

二.复制table

 function CloneTable(tb)
local clonedTable = {} --记录复制过的table,防止无限递归
local function CloneTb(tb)
if type(tb) ~= "table" then
return tb
elseif clonedTable[tb] then
return clonedTable[tb]
end local newTb = {}
clonedTable[tb] = newTb
for key,value in pairs(tb) do
newTb[CloneTb(key)] = CloneTb(value)
end
return setmetatable(newTb, getmetatable(tb))
end
return CloneTb(tb)
end

测试:

 local a = {, {a1 = "a1"}}
local b = CloneTable(a)
a[] = ""
a[].a1 =
b[] = ""
PrintTable(a)
PrintTable(b)

输出:

[Lua]table(一):打印与复制的更多相关文章

  1. 树形打印lua table表

    为方便调试lua程序,往往想以树的形式打印出一个table,以观其表内数据.以下罗列了三种种关于树形打印lua table的方法;法一 local print = print local tconca ...

  2. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...

  3. lua table 排序--满足多条件排序

    前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...

  4. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

  5. cocos2d-x lua table与json的转换

    cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...

  6. Lua table使用

    days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...

  7. lua table表

    lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...

  8. lua table表判断是否为空

    官方手册里早已经给了答案,那就是靠lua内置的next函数 即如此用: a = {} if next(a) == nil then next其实就是pairs遍历table时用来取下一个内容的函数. ...

  9. 关于 lua table表存储函数且运用

    --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意类型的值来做数组的索引,但这个值不能是nil--lua tabl ...

  10. lua table排序报错与解决

    lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...

随机推荐

  1. PHP中的插件机制原理和实例

    PHP项目中很多用到插件的地方,更尤其是基础程序写成之后很多功能由第三方完善开发的时候,更能用到插件机制,现在说一下插件的实现.特点是无论你是否激活,都不影响主程序的运行,即使是删除也不会影响. 从一 ...

  2. ML平台_饿了么实践

    (转载至:https://zhuanlan.zhihu.com/p/28592540) 说到机器学习.大数据,大家听到的是 Hadoop 和 Spark 居多,它们跟 TensorFlow 是一个什么 ...

  3. SoapUI 5.2.1 调试工具

    SoapUI 5.2.1 调试工具 1.打开soapUI. 2.新建一个项目,实例如下: 点击ok后在soapUI界面左侧会显示出此项目,如图: 2.创建测试用例: a.新建用例组,选择此项目右键,新 ...

  4. windows 控制台cmd乱码(及永久修改编码)的解决办法

    注册 windows 控制台cmd乱码(及永久修改编码)的解决办法 转载 2017年11月02日 22:49:52 1067 windows 控制台cmd乱码的解决办法 我本机的系统环境: OS Na ...

  5. VBScript Scripting Techniques: File Open Dialog http://www.robvanderwoude.com/vbstech_ui_fileopen.php

    I accept cookies This website uses cookies to ensure you get the best experience on our website More ...

  6. 【ActiveMQ】之安全机制(一)管控台安全设置

    ActiveMQ 管控台基于jetty,默认端口8161,默认用户名,密码都是admin,这样的安全配置过于弱化,所以我们需要修改一下 1.修改端口 找到conf/jetty.xml文件里面这一段配置 ...

  7. C++中sort函数小结

    我们都知道,sort函数是C++标准库<algorithm>中的一个库函数.它的功能是对数组/容器中的元素进行排序.用法示例如下: 一.对数组进行排序 示例: int a[] = {1,3 ...

  8. 【并发】基于 @Async和 CompletableFuture 实现并发异步操作

    参考链接:Spring官方示例 User.java package hello; import com.fasterxml.jackson.annotation.JsonIgnorePropertie ...

  9. Spring Boot 容器选择 Undertow 而不是 Tomcat

    Spring Boot 内嵌容器Undertow参数设置 配置项: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程 # 不要设置过大,如果过大,启动 ...

  10. Spring4.0之四:Meta Annotation(元注解)

    Spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持.注解为依赖注入,AOP(如事务)提供了更强大和简便的方式.这也导致你要是用一个相同的注解到许多不同的类中去.这篇文章介 ...