内容会持续更新,有错误的地方欢迎指正,谢谢!
相同点:
都能遍历集合(表、数组)
不同点:
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是按物理顺序遍历的。