[Lua] 迭代器pairs与ipairs实际使用差异

最近写了一段代码,发现table有我们自定义索引时候,使用ipairs去遍历table是不行的,无法通过迭代器去拿到我们的数据,eg
 

local temp = {["one"] = "pathOne",
              ["two"] = "pathTwo"}

for k,v in ipairs(temp) do     --这里不管打印 k 还是 v ,都是空值
    print(k)
end

如果使用ipars迭代器的话,我们取得的值是正常的

local temp = {["one"] = "pathOne",
              ["two"] = "pathTwo"}

for k,v in ipairs(temp) do     --这里不管打印 k 还是 v ,都是空值
    print(k)
end

输出:
--> one
--> two

因为ipairs不能返回nil,遇到nil则退出。ipairs的遍历要求table的索引是连续的整数,即1,2,3,所以我们第一个索引即为one不是ipairs预期想要的整数1,直接退出了循环;而pairs却没有这种限制,这里是个小坑,再举个例子

local temp =
{
    [1] = "testOne",
    [4] = "testTwo",
    [5] = "testThree"
}

for i,v in pairs(temp) do        -- 输出 "testOne" "testTwo" "testThree"
    print(temp[i])
end

for i,v in ipairs(temp) do       -- 输出 "testOne" k=2时断开,temp中没有2的索引
    print(temp[i])
end

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值