博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua中table需要注意的一点东西
阅读量:5777 次
发布时间:2019-06-18

本文共 1404 字,大约阅读时间需要 4 分钟。

hot3.png

关于table的文字说明我引用了lua程序设计的一些语句来概括表述:

    table类型实现了“关系数组”。“关系数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引他,还可以使用字符串活着其他类型的值(除了nil)来索引他。此外,table没有固定大小,可以动态的添加任意数量的元素到一个table中。

    在lua中,table既不是“值”也不是“变量”,而是“对象”,可以将一个table想象成一种动态分配的对象,程序仅持有一个对他们的引用(或指针),lua不会暗中产生table的副本或者创建新的table。

    引用完别人的说明之后,现在来看一下一些例子:

    

local testTable = {	1,	2,	"hi",	config = {1,2,3},	5,	6,	k = "hello",	8}for i=1,#testTable do	print(testTable[i])end

  输出为:

12hi568

config = {1,2,3}和k="hello"去哪里了呢?待会在分析这个问题,接下来再看一个实例:

local testTable = {	1,	2,	"hi",	config = {1,2,3},	5,	6,	k = "hello",	8}for i,value in ipairs(testTable) do 	print("i = " .. i .. ", value = " .. value)end

他的输出为:

i = 1, value = 1i = 2, value = 2i = 3, value = hii = 4, value = 5i = 5, value = 6i = 6, value = 8

config = {1,2,3}和k="hello"也并没有输出。再看第三个实例:

local testTable = {	1,	2,	"hi",	config = {1,2,3},	5,	6,	k = "hello",	8}for k,v in pairs(testTable) do 	print(k,v)end

输出为:

local testTable = {	1,	2,	"hi",	config = {1,2,3},	5,	6,	k = "hello",	8}for k,v in pairs(testTable) do 	print(k,v)end

这时候是把所有的都输出了,但是有没有发现,输出顺序有点变化了,

因为config = {1,2,3}的索引为config,k = "hello"的索引为k,而其他的都有lua给予的自然索引,比如1的索引为1,2的索引为2,5的索引为3,输出的时候是先把自然索引的全部输出,接着在根据在table的顺序进行一个个的输出。

为什么第一个实例和第二个实例只输出了自然索引的值,而忽略了其他的?其实第一个实例和第二个实例实际上时一样的,只是表现形式不一样,因此我们只需要说明第二种与第三种的区别即可:

pairs会遍历table的所有键值对,而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。因此我们在遍历table的时候要根据自己的需求而选择一种

转载于:https://my.oschina.net/u/815187/blog/484584

你可能感兴趣的文章
CentOS7 yum 安装git
查看>>
三元表达式之理解/jquery源代码分析之$.inArray实现
查看>>
STM32 mdk软件仿真时过不去时钟的问题
查看>>
Spark Streaming概念学习系列之Spark Streaming容错
查看>>
单例模式
查看>>
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
Python version 2.7 required, which was not foun...
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>
Java enum用法详解
查看>>
去云端的多条途径
查看>>
Docker容器从一知半解到入门
查看>>
关于“方法参数”
查看>>
Redis命令总结
查看>>
unable to write 'random state'错误解决
查看>>
context:annotation-config vs component-scan
查看>>