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

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

生活随笔

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

编程问答

Lua系列--pairs和ipairs

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

Lua系列–pairs和ipairs


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ù)字,表等)
我們來(lái)看一個(gè)簡(jiǎn)單的例子。

print('test pairs and ipairs') local t = {[1] = 1,2,[3] = 3,4,[5] = 5,[6] = 6 }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 ipairs 2 4 3 pairs 2 4 3 6 5

看到輸出結(jié)果是不是感覺(jué)有點(diǎn)莫名其妙,和平時(shí)接觸的遍歷感覺(jué)不太一樣。
我們來(lái)看一下這中間Table發(fā)生了怎樣的存儲(chǔ)變化

數(shù)據(jù)在表 t 中的存儲(chǔ)方式:
1)根據(jù)元素類別分別存進(jìn)哈希表與數(shù)組:
哈希表:{ [1]=1,[3]=3,[5]=5,[6]=6 };
數(shù)組:{ 2,4 }
2)將數(shù)組中的元素放入哈希表:
當(dāng)數(shù)組中的元素轉(zhuǎn)移到哈希表時(shí),數(shù)組中的元素變?yōu)閇1]=2與[2]=4;而此時(shí)哈希表中已有鍵值對(duì) [1]=1,發(fā)生沖突,會(huì)將新值2重新與鍵1匹配,即得到新的鍵值對(duì)[1]=2,此時(shí)的哈希表元素為:
{ [1]=2,[2]=4,[3]=3,[5]=5,[6]=6 }

斷點(diǎn)調(diào)試驗(yàn)證,

以上是純數(shù)字的內(nèi)容,我們來(lái)嘗試看一下數(shù)字和表混合的內(nèi)容

local testTab ={1,2,3,4,5}; -- '純表' local testTab1 = {a = 1, b = 2, c =3}; -- '雜表1' local testTab2 = {"zi",a = 5,b = 10, c = 15,"miao","chumo"}; -- '雜表2' local testTab3 = {"zi",a = 5,b = 10, c = 15,"miao",nil,"chumo"};

輸出結(jié)果

ipairs testTab 1 2 3 4 5 pairs testTab 1 2 3 4 5 -------------------------- ipairs testTab1 pairs testTab1 1 3 2 -------------------------- ipairs testTab2 zi miao chumo pairs testTab2 zi miao chumo 5 15 10 -------------------------- ipairs testTab3 zi miao pairs testTab3 zi miao chumo 5 15 10 --------------------------

Lua中的table最終在內(nèi)存中分配都是鍵值對(duì)的形式

還是按照先哈希(鍵值對(duì)),后數(shù)組(值)的方式進(jìn)行分配,
table在存儲(chǔ)值的時(shí)候是按照順序的,但是在存儲(chǔ)鍵值對(duì)的時(shí)候是按照鍵的哈希值存儲(chǔ)的
并不會(huì)按照鍵的字母順序或是數(shù)字順序存儲(chǔ)。
請(qǐng)注意最后一個(gè)table,即使元素為空nil的時(shí)候,也會(huì)分配一個(gè)key給它
想測(cè)試的可以自己進(jìn)行一下測(cè)試。

pairs和ipairs

二者遍歷的區(qū)別,

ipairs( i開頭的巧記 int類型的數(shù)值開頭只是為了助記 不是實(shí)際含義)
遍歷的索引的特點(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.下一個(gè)索引不存在

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

文章參考

https://blog.csdn.net/qq_25561675/article/details/76586891
https://www.azimiao.com/2738.html

總結(jié)

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

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