Lua--pairs和ipairs遍历区别
Lua中Table的存儲方式
在看二者的區(qū)別之前,我們首先來看一下Lua中的table是如何在內(nèi)存中進(jìn)行分配的。
Table的組成:
1.哈希表 用來存儲Key-Value 鍵值對,當(dāng)哈希表上有沖突的時(shí)候,會通過鏈表的方式組織沖突元素
2.數(shù)組 用來存儲數(shù)據(jù)(包括數(shù)字,表等)
輸出結(jié)果
test pairs and ipairs count 2 ipairs 2 4 pairs 2 4 5 6數(shù)據(jù)在表 t 中的存儲方式:
1)根據(jù)元素類別分別存進(jìn)哈希表與數(shù)組:
哈希表:{ [1]=1, [3]=3, [5]=5, [6]=6 }
數(shù)組:{ 2, 4, nil?}
2)將數(shù)組中的元素放入哈希表:
當(dāng)數(shù)組中的元素轉(zhuǎn)移到哈希表時(shí),數(shù)組中的元素變?yōu)閇1]=2, [2]=4, [3]=nil;而此時(shí)哈希表中已有鍵值對 [1]=1,[3]=3發(fā)生沖突,會將新值2重新與鍵1匹配,即得到新的鍵值對[1]=2,[3]=nil此時(shí)的哈希表元素為:
{ [1]=2, [2]=4, [3]=nil, [5]=5, [6]=6 }
問題解析:
1. ipairs只遍歷出2,4,因?yàn)橛龅絥il類型的數(shù)據(jù)[3]=nil,終止遍歷,并且是按照連續(xù)整數(shù)為索引
2. pairs遍歷整個表,打印所有的value
3. 慎用#來獲取table的元素總數(shù),table數(shù)組末尾有nil,不會計(jì)入總數(shù)。當(dāng)nil出現(xiàn)在table數(shù)組中間,會計(jì)入總數(shù)。
?
pairs和ipairs二者遍歷的區(qū)別
ipairs
遍歷的索引的特點(diǎn)
1.必須是從1開頭的 int類型的連續(xù)整數(shù) 1 2 3 4 5 6 7 8 9 ……
2.索引不能斷開,斷開則終止遍歷(當(dāng)存在nil 類型的數(shù)據(jù))
終止時(shí)機(jī)
1.索引斷開
2.下一個索引不存在
pairs
遍歷的索引的特點(diǎn)
1.遍歷的順序是隨機(jī)的,但是一定會遍歷整個表
2.pairs是先按照索引值打印(數(shù)字型key,可以用[ ]訪問),然后打印哈希(鍵值對)
終止時(shí)機(jī)
1.所有元素遍歷完畢
總結(jié)
以上是生活随笔為你收集整理的Lua--pairs和ipairs遍历区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 使用 canvas 绘制地图路线
- 下一篇: 今日干货|如何自学视频剪辑(自学视频剪辑