• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

如何更好的学习Lua第三篇,Table表

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

table是Lua语言中的一种重要的数据类型, table 的一些特性简单列举如下:
(1).table 是一个“关联数组”,数组的索引可以是数字或者是字符串;
(2).table 的默认初始索引一般以 1 开始;
(3).table 的变量只是一个地址引用,对 table 的操作不会产生数据影响;
(4).table 不会固定长度大小,有新数据插入时长度会自动增长;
(5).table 所有索引值都需要用 “[“ 和 ”]” 括起来;如果是字符串,还可以去掉引号和
中括号; 即如果没有[]括起,则认为是字符串索引;
(6).table 所有元素之间,总是用逗号 “,” 隔开;
先来定义个简单table来看一下,老规矩不废话上代码如下;

我们用代码验证了:
定义的table表_tab里面的元素可以是“字符串”也可以是“数字”。
直接输出_tab是一个地址
table 的下标索引一般以 1 开始;
接下来我们在来验证一下table不会固定长度大下,在这之前我们先来介绍一下table的常用函数,lua提供了一些辅助函数来操作table,例如insert、remove等。
废话不说上代码如图下:

代码验证根据输出得到一下结论:
函数table.insert将一个元素插入到指定位置:用法在代码里面注释的已经很清楚了。根据输出打印也能很直观的看到结果,就不过多的去解释了
根据插入的元素改变了表的长度这就验证了table 不会固定长度大小,有新数据插入时长度会自动增长。我之前写过一篇“lua获取table的长度”结合着一起看,这里可以验证这一说法


如果说我在插入元素的时候不指定位置会怎么样?上代码如图下:

代码验证:
insert的第二个参数是可以省略的,这样就会插入到数组的最后,从而不必移动其他元素。
这个时候我们来扩展一下,我能将一个元素插入到指定的位置上。那我能不能通过某个元素获取它所在的位置,答案是肯定当然可以。我之前写过“如何获取一个数组元素位置”可以去看一下

有插入insert就会有删除remove,下面上remove代码:

代码验证:
table.remove是从数组中移除(并返回)一个元素,table.remove(_tab,1)将移除_tab中下标是1的元素,如果不指定移除位置,则移除最后一个。 打印的输出已经非常详细了没什么好多说的了。
知道了如何移除,那我要想清空一个表该怎么办?难道要用一个循环一个个去移除啊,当然不用这么麻烦了。简单到你想不到:上代码如下:

代码验证:
直接_tab={}或者_tab=nil

清空的意思是把表里的所有东东都清空吧? 直接={}就行。

关于内存占用这个问题不用担心,lua的垃圾回收机制会在下次gc时把引用计数为0(就是原先)的table在内存中自动清除。
是不是简单到你都没有想到?哈哈哈
让我们继续向下进行吧
另一个有用的函数是sort,对数组进行排序,如果没有提供排序函数,默认是<操作。这里不仅仅是数,对字符串也有效。
table.sort() 话不多说代码如下:

代码验证:
如何有新人看不懂这个for循环先不要管它,你只要知道table.sort()将表排序了就可以,至于for循环等等之后再去整理介绍,这里主要介绍table。
大家会发现这个正序,那有没有倒序呢?答案是肯定的,当然有。这里不过多强调后面我会针对如何获得最大数,最小数,正序,倒序,等等拿出一本篇幅专门去整理。这里主要还是介绍table。
刚才说了数字可以排序,字符串也可以排序。上代码

代码验证:
是可以排序的,我没有骗人。
好累,不过还是要继续!
table.maxn()
含义:table.maxn()函数返回指定table中所有正数key值中最大的key值。 如果不存在key值为正数的元素, 则返回0。 此函数不限于table的数组部分。
上代码:

代码验证:
从输出打印中应该可以很直观的看到结果,有一点要清楚是key的最大值,不是元素的。
table一些简单的介绍就先介绍到这里,下面给大家简单的介绍一下我在游戏开发中的一些使用,要学会更要会用!
废话不多说上代码:

从函数名就能看出来,这是一个游戏数据类。里面随意写了一个table表。添加到了init函数里。我把init函数给您粘贴出来如下:

init函数很简洁明了,传一个表进来,插入到self._root里面去。就干了这事。(self._root = {};也是一张表)
如何使用呢:
代码如下:

马上把setIndexValue()和getIndexValue()代码奉上:

这只是一种简单的用法,告诉你了如何使用。可以演变出好多用法,这就要靠自己了。
在最后在来介绍一下这个table.concat() 函数
格式:table.concat(table, sep, start, end)
concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符, start的默认值是1, end的默认值是数组部分的总长。
有朋友留言说如果把表里的所有key值打印出来,接下来咱们就来实现一下。

代码验证:
通过输出打印出来,第一个输出就打印了所有,后面就根据需求具体打印。
输出打印和代码应该没什么可说的了,已经很直观。
写了好多啊,肯定不是很全,也会漏掉了一些关于table表的相关知识。不管怎么说吧继续努力,今后查漏补缺吧。
写了这么多好累,没有功劳也有苦劳,看在辛苦上加个关注给个赞,我们一起学习一起进步!


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
lua的私有性(privacy)发布时间:2022-07-22
下一篇:
Sublimetext添加lua发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap