1. 程式人生 > >Lua中pairs 和 ipairs的異同

Lua中pairs 和 ipairs的異同

內容會持續更新,有錯誤的地方歡迎指正,謝謝!

相同點:

都能遍歷集合(表、陣列)

不同點:

pairs

能遍歷集合的所有元素。

ipairs

只能按照索引升序遍歷,若索引中斷則停止遍歷,也就是若遇到 nil 則會退出。
也就是,只會從1開始(如果key裡沒有1, 那就不會開始遍歷),每步進1,忽略中間不是數字的key,到第一個不連續的數字為止(不含)。

--例子1:
local tab= { 
[1] = "a", 
[2] = "b", 
[4] = "c" 
} 
for i,v in pairs(tab) do        -- 輸出 "a" ,"b", "c"  ,
    print( tab[i] ) 
end 
for i,v in ipairs(tab) do    -- 輸出 "a" ,"b" ,k=3時斷開 
    print( tab[i] ) 
end
--例子2:
local tab= {
    [1] = "a",
    [2] = "b",
    ["abc"] = "test",
    [3] = "123",
    [5] = "456"
}
for i, v in  ipairs(tab) do    -- 輸出 "a" ,"b" ,"123" ,忽略k="abc",並在k=4時斷開 
    print( tab[i] )
end

補充

pairs迭代器可以遍歷table中所有key,但是key的順序無法保證是table中的順序,這是為什麼?
理由:
t={1,2,3} 不等價於t={[1]=1,[2]=2,[3]=3},前者是按物理順序構造的;後者是按雜湊演算法

構造的,導致物理上是亂的。而pairs是按物理順序遍歷的。