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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值