lua中,万物化table,table生万物,哈哈哈哈,好像很厉害。
问题的由来:
之前想写一个table排序,按顺序处理排序后的table,然后输出结果。然后遇到了一些了不得问题。找了半天原因发现是自己脑子不太好,决定婊一婊自己。
table的存放
table的存放其实和定义有关系
【系统指定key定义】
local tb = {1, 3, ad, 34}
此时,tb中的值的key都是数字,而且是连续的key,遍历table可以发现实际存放是顺次的。就相当于数组了。
【自指定key定义】
------如果我要定义一个table,他的key是不连续的,但是key又是可以按照大小排序的,此时定义table后,它实际存放的结果会不会是按照key的大小依次存放的呢?
------不会,你死了这条心吧
table中,如果key值是不连续的,而且key的利用率不足50%(数量/最大key值),此时,存放是使用的Hash算法。
所以,定义顺序 != 存放的顺序
table 常用function
【table.contact】将table元素连接为字符串
使用很简单的呀:
table.concat( tablename, ", ", start_index, end_index )
然后:
多系哟,所以发现了吗???
当key不是连续的时候,这个蠢笨的table.concat 遇到第一个不连续的key就不继续连接了
笨死了!!!
然后蠢笨的我:
table为嵌套的时候,将table中的所有元素连接起来,用到了书上说的递归:
【table.sort】
table.sort( tablename, sortfunction )
sortfunction是第二排序算法,不填写时,默认的是对tablename内的元素进行升序排序。
终于写到我要婊自己的地方了,我定义了一个key不连续的table,然后想对table内的元素进行排序,结果:
不说了,说多了都是泪。。
在对table进行排序时,需要对table进行预处理。如果是要排序table的key,就要把table的key取出来,存放到新table中,对新table进行排序。
总之,table不是数组,不能简单的当做数组来用
网友评论