Lua中,泛型for迴圈遍歷table時,ipairs和pairs的區別
阿新 • • 發佈:2019-01-31
為了看出兩者的區別,首先定義一個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是先按照索引值列印,列印完成後再按照鍵值對的鍵的雜湊值列印它的值。