1. 程式人生 > >Lua中,泛型for迴圈遍歷table時,ipairs和pairs的區別

Lua中,泛型for迴圈遍歷table時,ipairs和pairs的區別

為了看出兩者的區別,首先定義一個table:

a={"Hello","World";a=1,b=2,z=3,x=10,y=20;"Good","Bye"}
使用ipairs對其進行遍歷:
for i, v in ipairs(a) do
	print(v)
end
輸出的結果是:

Hello
World
Good
Bye

可見ipairs並不會輸出table中儲存的鍵值對,會跳過鍵值對,然後按順序輸出table中的值。

再使用pairs對其進行遍歷:

for i, v in pairs(a) do
	print(v)
end
輸出的結果是:

Hello 
World 
Good  
Bye   
1     
10    
2     
20    
3     

可見pairs會輸出table中的值和鍵值對,並且在輸出的過程中先按順序輸出值,再亂序輸出鍵值對。

這是因為table在儲存值的時候是按照順序的,但是在儲存鍵值對的時候是按照鍵的雜湊值儲存的,並不會按照鍵的字母順序或是數字順序儲存。

對於a來說,如果執行print(a[3]),輸出的結果也會是Good。也就是說table並不會給鍵值對一個索引值。

也就是說ipairs只是按照索引值順序,打印出了table中有索引值的資料,沒有索引值的不管。

而pairs是先按照索引值列印,列印完成後再按照鍵值對的鍵的雜湊值列印它的值。