Lua中pairs 和 ipairs的异同

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BillCYJ/article/details/82988339

内容会持续更新,有错误的地方欢迎指正,谢谢!

相同点:

都能遍历集合(表、数组)

不同点:

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是按物理顺序遍历的。

猜你喜欢

转载自blog.csdn.net/BillCYJ/article/details/82988339
今日推荐