Lua中pairs 和 ipairs的異同
阿新 • • 發佈:2018-11-11
內容會持續更新,有錯誤的地方歡迎指正,謝謝!
相同點:
都能遍歷集合(表、陣列)
不同點:
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},前者是按物理順序構造的;後者是按雜湊演算法