[Lua]table(一):打印与复制
一.打印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(一):打印与复制的更多相关文章
- 树形打印lua table表
为方便调试lua程序,往往想以树的形式打印出一个table,以观其表内数据.以下罗列了三种种关于树形打印lua table的方法;法一 local print = print local tconca ...
- lua table integer index 特性
table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...
- lua table 排序--满足多条件排序
前提 假设 一个小怪 有三种属性,等级(level).品质(quality).id(pid) 我们需要对他们进行排序,两种排序情况,第一是单一属性排序,比如按照等级进行排序,或者多种属性进行优先级排序 ...
- cocos2d-x lua table数据存储
cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...
- cocos2d-x lua table与json的转换
cocos2d-x lua table与json的转换 version: cocos2d-x 3.6 1.引入json库 require("src/cocos/cocos2d/json&qu ...
- Lua table使用
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...
- lua table表
lua table表 语法结构 创建一个 table 直接使用 "{}" 即可 table1 = {} -- 赋值 table1["name"] = " ...
- lua table表判断是否为空
官方手册里早已经给了答案,那就是靠lua内置的next函数 即如此用: a = {} if next(a) == nil then next其实就是pairs遍历table时用来取下一个内容的函数. ...
- 关于 lua table表存储函数且运用
--table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意类型的值来做数组的索引,但这个值不能是nil--lua tabl ...
- lua table排序报错与解决
lua table排序 table的sort函数 比如按照大小进行排序,下面这种写法在某些情况下可能会排序错误,甚至报invalid order function for sorting table. ...
随机推荐
- Eclipse各个版本及其对应代号、下载地址列表
版本号 代码 日期 下载地址 Eclipse 3.1 IO[木卫一,伊奥] 2005 http://archive.eclipse.org/eclipse/downloads/drops/R-3.1- ...
- MS DSVM、DLVM
DSVM(Data Science Virtual Machine 数据科学虚拟机) 是专为研究数据科学生成的 Microsoft Azure 云上的自定义 VM 映像.它预装并预配了许多热门数据科 ...
- 怎样在Qsys系统中添加第三方IP核
1.新建Quartus II工程 2.新建Qsys系统 3.如果没有我们需要添加的IP,需要自己额外添加 4在我们新建的Quartus工程里面新建一个文件夹,命名为ip; 5.将我们已经下载好的IP文 ...
- PI Square中文论坛: PI SDK 开发中级篇| PI Square
注: 为了更好的利用站内资源营造一个更好的中文开发资源空间,本文为转发修正帖,原作者为OSIsoft技术工程师王曦(Xi Wang),原帖地址:PI SDK 中级篇 来源:https://d.gg36 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- lucene 一次查询多个id
在文本搜索中,有时也需要一次搜索多个id,这里id类似数据库里面的主键. 这个id在索引里面的倒排列表长度往往等于1. 例如:根据id=[1,2,4,6,7]查询索引 最最一般的思路是构造一个bool ...
- Hadoop错误集:Could not find the main class: org.apache.hadoop.*
在搭建Hadoop机群的时候,之前遇见了很多次找不到类的错误,因为对Hadoop了解不深,所以就在网上漫无目的的找解决方案,所以这里总结下我用的方法. 解决办法一: 我之前遇到了找不到 org.apa ...
- Dubbo(6)Dubbo服务集群实现负载均衡
什么时候用到集群?比如说某个服务,并发量特别大的时候就会用到集群: 具体的话比如说,某些特殊的项目一天的注册量10万,国家的一些考试系统,集中在几天,注册量一天10万,如果只弄一个服务,根本服务不过来 ...
- 忽略时间的小时分,展示的方法 data函数
date(create_at) 列表: sql:
- scala 基本类型和操作
Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是 ...