日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Lua--pairs和ipairs遍历区别

發(fā)布時(shí)間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua--pairs和ipairs遍历区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Lua中Table的存儲(chǔ)方式

在看二者的區(qū)別之前,我們首先來(lái)看一下Lua中的table是如何在內(nèi)存中進(jìn)行分配的。
Table的組成:
1.哈希表 用來(lái)存儲(chǔ)Key-Value 鍵值對(duì),當(dāng)哈希表上有沖突的時(shí)候,會(huì)通過(guò)鏈表的方式組織沖突元素
2.數(shù)組 用來(lái)存儲(chǔ)數(shù)據(jù)(包括數(shù)字,表等)

print('test pairs and ipairs') local t = {[1] = 1,2,[3] = 3,4,[5] = 5,[6] = 6,nil, } print('count '..#t) print('ipairs ') for i, v in ipairs(t) doprint(v) endprint('pairs ') for i, v in pairs(t) doprint(v) end

輸出結(jié)果

test pairs and ipairs count 2 ipairs 2 4 pairs 2 4 5 6

數(shù)據(jù)在表 t 中的存儲(chǔ)方式:
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í)哈希表中已有鍵值對(duì) [1]=1,[3]=3發(fā)生沖突,會(huì)將新值2重新與鍵1匹配,即得到新的鍵值對(duì)[1]=2,[3]=nil此時(shí)的哈希表元素為:
{ [1]=2, [2]=4, [3]=nil, [5]=5, [6]=6 }

問(wèn)題解析:

1. ipairs只遍歷出2,4,因?yàn)橛龅絥il類型的數(shù)據(jù)[3]=nil,終止遍歷,并且是按照連續(xù)整數(shù)為索引

2. pairs遍歷整個(gè)表,打印所有的value

3. 慎用#來(lái)獲取table的元素總數(shù),table數(shù)組末尾有nil,不會(huì)計(jì)入總數(shù)。當(dāng)nil出現(xiàn)在table數(shù)組中間,會(huì)計(jì)入總數(shù)。

?

pairs和ipairs二者遍歷的區(qū)別

ipairs
遍歷的索引的特點(diǎn)
1.必須是從1開(kāi)頭的 int類型的連續(xù)整數(shù) 1 2 3 4 5 6 7 8 9 ……
2.索引不能斷開(kāi),斷開(kāi)則終止遍歷(當(dāng)存在nil 類型的數(shù)據(jù))
終止時(shí)機(jī)
1.索引斷開(kāi)
2.下一個(gè)索引不存在

pairs
遍歷的索引的特點(diǎn)
1.遍歷的順序是隨機(jī)的,但是一定會(huì)遍歷整個(gè)表
2.pairs是先按照索引值打印(數(shù)字型key,可以用[ ]訪問(wèn)),然后打印哈希(鍵值對(duì))
終止時(shí)機(jī)
1.所有元素遍歷完畢

總結(jié)

以上是生活随笔為你收集整理的Lua--pairs和ipairs遍历区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。