(已解決)Lua的pairs迭代索引斷開的table時輸出結果很奇怪

測試代碼如下:

local tab= {
[1] = "a",
[2] = "b",
[5] = "c" ,
[6] = "d" ,
[15] = "e",
[16] = "f" ,
[17] = "g",
[100] = "h"
}
for i,v in pairs(tab) do
    print( i,tab[i] )
end

運行結果如下:
5       c
1       a
100     h
2       b
17      g
16      f
15      e
6       d


原因:
table的值有兩種儲存方式:線性列表List和字典Dictionary。
列表用ipairs迭代,因爲它是順序遍歷的。
字典用ipairs迭代,因爲它是按鍵值對方式遍歷的。
由於鍵值對方式不是順序存取的,所以table中即使是順序排列也可能亂序輸出。

另外,table中的數據的插入方式不同,也會影響數據在表中的排序。
比如 tab[index] = value 和 table.insert(tab,value) ,前者數據順序跟插入的先後有關,不一定與index相同,而後者則是按順序從後插入。



參考文章:

Lua中的ipair 和 pair的區別


發佈了25 篇原創文章 · 獲贊 61 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章