ipairs與pairs詳解
在說pairs與ipairs之前,先說lua中table的資料結構:
1.由乙個
雜湊表與乙個
陣列構成,當插入乙個元素時,如果元素是鍵值對,則將其放入雜湊表中,如果是值則放入陣列中。
2.hash表上會有衝突,通過乙個鍊錶的形式組織衝突的元素。
接下來看一下ipairs與pairs是如何遍歷table的: 例:
資料在表 t 中的儲存方式:
1)根據元素類別分別存進雜湊表與陣列:
雜湊表:;
陣列:2)將陣列中的元素放入雜湊表:
當陣列中的元素轉移到雜湊表時,陣列中的元素變為[1]=2與[2]=4;而此時雜湊表中已有鍵值對 [1]=1,發生衝突,會將新值2重新與鍵1匹配,即得到新的鍵值對[1]=2,此時的雜湊表元素為:
所以當ipairs遍歷table時,從鍵值1開始連續遞增,當鍵值斷開或遇到nil時退出,所以上面的例子中ipairs遍歷出的結果是2,4,3。
而pairs遍歷時,會遍歷表中的所有鍵值對,且元素是根據雜湊演算法來排序的,得到的不一定是連續的,所以pairs遍歷出的結果是2,4,3,6,5。
本文若有不正確之處,敬請提出,多多指教。
範性for語義以及pair和ipairs的區別
詳情參考 lua手冊 1.範性for語義 在了解pair和ipair前先簡單了解下lua中的for迴圈,這裡只闡述範性for迴圈的語義,範性 for 在自己內部儲存迭代函式,實際上它儲存三個 值 迭代函式 狀態常量 控制變數。for的正規化如下 for indo end是以乙個或多個逗號分隔的變數名...
Lua之pairs和ipairs的區別
之前看了其他前輩寫得關於pairs和ipairs的區別,覺得沒能夠很好抓住重點,所以這次因為複習的關係,我自己也寫了乙個。lua庫為泛型for迴圈提供了幾個迭代器函式 io.lines用於遍歷每行 pairs用於迭代table元素 ipairs用於迭代陣列元素 string.gmatch用於迭代字串...
lua 中pairs 和 ipairs差別
ipairs 和pairs在lua中都是遍歷tbale的函式可是兩者有差別 1.pairs遍歷table中的全部的key vale 而ipairs會依據key的數值從1開始加1遞增遍歷相應的table i 值 pairs能夠遍歷表中全部的key,而且除了迭代器本身以及遍歷表本身還能夠返回nil 可是...