lua中,萬物化table烈炭,table生萬物溶锭,哈哈哈哈,好像很厲害符隙。
問題的由來:
之前想寫一個table排序趴捅,按順序處理排序后的table,然后輸出結(jié)果霹疫。然后遇到了一些了不得問題拱绑。找了半天原因發(fā)現(xiàn)是自己腦子不太好晾浴,決定婊一婊自己暴氏。
table的存放
table的存放其實和定義有關系
【系統(tǒng)指定key定義】
local tb = {1, 3, ad, 34}
此時批狐,tb中的值的key都是數(shù)字盾饮,而且是連續(xù)的key,遍歷table可以發(fā)現(xiàn)實際存放是順次的炕贵。就相當于數(shù)組了护糖。
【自指定key定義】
------如果我要定義一個table晶疼,他的key是不連續(xù)的国觉,但是key又是可以按照大小排序的吧恃,此時定義table后,它實際存放的結(jié)果會不會是按照key的大小依次存放的呢蛉加?
------不會,你死了這條心吧
table中缸逃,如果key值是不連續(xù)的针饥,而且key的利用率不足50%(數(shù)量/最大key值),此時需频,存放是使用的Hash算法丁眼。
所以,定義順序 昭殉!= 存放的順序
table 常用function
【table.contact】將table元素連接為字符串
使用很簡單的呀:
table.concat( tablename, ", ", start_index, end_index )
然后:
多系喲苞七,所以發(fā)現(xiàn)了嗎?挪丢?蹂风?
當key不是連續(xù)的時候,這個蠢笨的table.concat 遇到第一個不連續(xù)的key就不繼續(xù)連接了
笨死了G睢;葑摹!
然后蠢笨的我:
table為嵌套的時候,將table中的所有元素連接起來撵渡,用到了書上說的遞歸:
【table.sort】
table.sort( tablename, sortfunction )
sortfunction是第二排序算法融柬,不填寫時,默認的是對tablename內(nèi)的元素進行升序排序趋距。
終于寫到我要婊自己的地方了,我定義了一個key不連續(xù)的table粒氧,然后想對table內(nèi)的元素進行排序,結(jié)果:
不說了节腐,說多了都是淚外盯。。
在對table進行排序時铜跑,需要對table進行預處理门怪。如果是要排序table的key,就要把table的key取出來锅纺,存放到新table中掷空,對新table進行排序。
總之囤锉,table不是數(shù)組坦弟,不能簡單的當做數(shù)組來用