LUA-TABLE-遍历数组的应用.docx

LUA-TABLE-遍历数组的应用.docx

ID:57587699

大小:40.36 KB

页数:10页

时间:2020-08-27

LUA-TABLE-遍历数组的应用.docx_第1页
LUA-TABLE-遍历数组的应用.docx_第2页
LUA-TABLE-遍历数组的应用.docx_第3页
LUA-TABLE-遍历数组的应用.docx_第4页
LUA-TABLE-遍历数组的应用.docx_第5页
资源描述:

《LUA-TABLE-遍历数组的应用.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、LUATABLE遍历数组的应用分类:编程2013-02-2113:4085人阅读评论(0)收藏举报当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是:forkey,valueinpairs(tbtest)doXXXendforkey,valueinipairs(tbtest)doXXXendfori=1,#(tbtest)doXXXendfori=1,table.maxn(tbtest)doXXXend下面依次来讲讲四种遍历方式,首先来看fork,vinpair

2、s(tbtest)do这种方式:先看效果:tbtest={[1]=1,[2]=2,[3]=3,[4]=4,}forkey,valueinpairs(tbtest)doprint(value)end我认为输出应该是1,2,3,4,实际上的输出是1,2,4,3。我因为这个造成了一个bug,这是后话。也就是说fork,vinpairs(tbtest)do这样的遍历顺序并非是tbtest中table的排列顺序,而是根据tbtest中key的hash值排列的顺序来遍历的。 当然,同时lua也提供了按照key的大小顺序来遍历的,注意,是大小顺序,仍然不是key

3、定义的顺序,这种遍历方式就是fork,vinipairs(tbtest)do。fork,vinipairs(tbtest)do这样的循环必须要求tbtest中的key为顺序的,而且必须是从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止。tbtest={[1]=1,[2]=2,[3]=3,[5]=5,}fork,vinipairs(tbtest)doprint(v)end只会打印1,2,3。而5则不会显示。localtbtest={[2]=2,[3]=3,[5]=5,}fork,vinipairs(tbtest)doprin

4、t(v)end这样就一个都不会打印。第三种遍历方式有一种神奇的符号'#',这个符号的作用是是获取table的长度,比如: tbtest={[1]=1,[2]=2,[3]=3,}print(#(tbtest))打印的就是3tbtest={[1]=1,[2]=2,[6]=6,}print(#(tbtest))这样打印的就是2,而且和table内的定义顺序没有关系,无论你是否先定义的key为6的值,‘#’都会查找key为1的值开始。如果table的定义是这样的:tbtest={["a"]=1,[2]=2,[3]=3,}print(#(tbtest))那么

5、打印的就是0了。因为‘#’没有找到key为1的值。同样:tbtest={[“a”]=1,[“b”]=2,[“c”]=3,}print(#(tbtest))打印的也是0所以,fori=1,#(tbtest)do这种遍历,只能遍历当tbtest中存在key为1的value时才会出现结果,而且是按照key从1开始依次递增1的顺序来遍历,找到一个递增不是1的时候就结束不再遍历,无论后面是否仍然是顺序的key,比如: table.maxn获取的只针对整数的key,字符串的key是没办法获取到的,比如:tbtest={[1]=1,[2]=2,[3]=3,}pr

6、int(table.maxn(tbtest))tbtest={[6]=6,[1]=1,[2]=2,}print(table.maxn(tbtest))这样打印的就是3和6,而且和table内的定义顺序没有关系,无论你是否先定义的key为6的值,table.maxn都会获取整数型key中的最大值。如果table的定义是这样的:tbtest={["a"]=1,[2]=2,[3]=3,}print(table.maxn(tbtest))那么打印的就是3了。如果table是:tbtest={[“a”]=1,[“b”]=2,[“c”]=3,}print(ta

7、ble.maxn(tbtest))print(#(tbtest))那么打印的结果就都是0了。换句话说,事实上因为lua中table的构造表达式非常灵活,在同一个table中,你可以随意定义各种你想要的内容,比如:tbtest={[1]=1,[2]=2,[3]=3,["a"]=4,["b"]=5,}同时由于这个灵活性,你也没有办法获取整个table的长度,其实在coding的过程中,你会发现,你真正想要获取整个table长度的地方几乎没有,你总能采取一种非常巧妙的定义方式,把这种需要获取整个table长度的操作避免掉,比如:tbtest={tbaaa

8、={[1]=1,[2]=2,[3]=3,},["a"]=4,["b"]=5,}你可能会惊讶,上面这种table该如何遍历呢

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。