lua循環過程中刪除pairs(table)的table會怎麼樣

lua循環中的for-i方式跳過,此處只講for-i,v方式,也就是pairs/ipairs方式。

例子,我需要利用for-pairs(table)循環遍歷table中的元素,在遍歷過程中,每次處理完一個元素後,我會按需決定是否刪除掉table中這個元素。那麼問題來了,刪除元素之後是否改變table的結構,for循環是否能繼續進行下去?下面進行測試。

ipairs測試代碼:


測試結果:



結果表明,

1、在循環的每一次 i,v 中,程序會保持着 i,v 的值,即使在table中已經被移除。

2、table.remove執行後,對應的 t 會自動整理好,整理方式是移除元素後把後面的元素往前推。

3、每一次 i,v 後,i 依然會根據正常順序遞增,即使 i 原本的 v 已經移除,被後一個 v 所替換,因此remove後下次 i,v 會跳過被移除的v的後一個元素。


pairs測試代碼:


測試結果:



結果表明:

1、lua table中,無索引元素會自動添加索引,從1開始+1遞增。如果無索引元素放在table最後,前面元素中索引與自動添加的索引相同的元素會被覆蓋。

2、table.remove後,該元素之後按順序的、連續的索引的元素會往前推,但是索引斷開的元素不受影響,依然在原索引位置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章