Lua ipairs与pairs的区别
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Lua ipairs与pairs的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                Lua ipairs與pairs的區別
- 相同點和不同點
- 相同點
- 不同點:
 
- 舉例說明
- 測試代碼
- 測試結果分析
 
相同點和不同點
相同點
- ipairs和pairs一般都用來對table進行遍歷
不同點:
- ipairs:ipairs是按key的順序遍歷的,從key = 1開始,對table按順序遍歷,如果key = 1有值,則會繼續訪問key = 2的值,如果key = 2有值,則會訪問key =3 的值,如此下去。但一旦沒有則會終止整個訪問流程。
- pairs: 首先pairs在遍歷時,是無序的,并不會從小到大順序遍歷。但是pairs可以完整的遍歷整個table,并不會像ipairs一樣遇到nil就停下來。
舉例說明
測試代碼
tab = { [1] = 1, b = 2, c = 3,5,4,6}print("------------ipairs遍歷結果------------") for k,v in ipairs(tab) doprint(k..":"..v) endprint("------------pairs遍歷結果------------")for k,v in pairs(tab) doprint(k..":"..v) end測試結果
------------ipairs遍歷結果------------ 1:5 2:4 3:6 ------------pairs遍歷結果------------ 1:5 2:4 3:6 c:3 b:2測試結果分析
為什么會輸出這樣的結果呢。我們可以把table里的元素分為2種;
- 1種是帶 鍵值對(key-value),如上面聲明的 [1] = 1, b = 2, c = 3 這3個元素;
- 另外1種是 不帶鍵值對的,如剩下的4,5,6;
table會先存儲帶鍵值對的,然后再按順序存儲不帶鍵值對的.
 1:首先存儲帶鍵值對的:
- [1] = 1, b = 2, c = 3
2:接著存儲不帶鍵值對的 (存這種類型時,會從1開始自增,自動為其附上key),比如
- [1] = 5, [2] = 4, [3] = 6
3: 遇到一樣的key時,會覆蓋掉先前的
- 比如這里的 [1] = 1 就被 [1] = 5 覆蓋掉了
4:存儲后的結果
- b = 2, c = 3, [1] = 5, [2] = 4, [3] = 6
看到存儲后的結果,現在我們直接去看ipairs和pairs打印出來的結果就很清晰了。是完全符合預期的。
總結
以上是生活随笔為你收集整理的Lua ipairs与pairs的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: freertos---队列管理
- 下一篇: python版本的Pairs图
