Lua中ipairs和pairs的区别

查阅前辈的博文后,写出此码。

--[[
    ipairs和pairs的区别
    created by ZhangTao at 2016年11月7日00:07:14
--]]

--[[
    迭代table元素的(pairs),迭代数组元素的(ipairs)

    pairs可以遍历表中所有的key,可以返回nil;

    ipairs不能返回nil只能返回0,如果遇到nil则退出迭代,
    它从整数1开始递增遍历,(1遍历后遍历2,3)
    中间不能断开,不然会退出循环,
    且只能遍历到表中出现的第一个不是整数的key。
--]]
--test examples:

--第一个表
local tabFiles={
    [3]="test2",
    [6]="test3",
    [4]="test1",
    [2]="bbb",
}
--[[
    在ipairs(tabFiles)遍历中,当i=1时候value就是nil,
    所以直接退出循环不输出任何值。
    但是在使用pairs(tabFiles)遍历时,不会如上,而是输出全部。
--]]
for i,v in ipairs(tabFiles) do
    --print(i,v)
end

for k,v in pairs(tabFiles) do
    --print(k,v)
end

--修改内容tabFiles
tabFiles[1]="testOne"
tabFiles[2]="testTwo"
for i,v in ipairs(tabFiles) do
    --print(i,v)
end
print("------------")
for k,v in pairs(tabFiles) do
    --print(k,v)
end

--第二个表
local tt={
    [1]="test1",
    [4]="test4",
    [5]="test5",
}

for i,v in ipairs(tt) do  --输出1  test1,在i=2时,退出遍历
    --print(i,v)
end
print("------------")
for k,v in pairs(tt) do   --全部输出
    --print(k,v)
end
print("------------")

--第三个表
local Eng={
    ["1"]="replaceOneValue",    --是字符串的下标 1  ,而不是数值的下标 1
    [5]="duola",
    "alpha",    --没有显式说明值的下标,那么其下标默认为1,且优先级高于[1]
    "beta",     --下标递增,为2
    [1]="lish", --由于优先级的原因,不管是使用哪种(共3种),都会被忽略
    [3]="uno",
    ["two"]="dos",
}

for i,v in ipairs(Eng) do   --输出3个: 1,2,3
    --print(i,v)
end
print("------------")
for k,v in pairs(Eng) do    --全部输出(除去被忽略了的)
    --print(k,v)
end

print("++++++++++++")
for i=1,#Eng do             --输出结果和ipairs一致。
    --print(Eng[i])
end
print("------------")

--第四个表
--这是一道面试题
local mqkk={
    [1]="a",
    "b",
    [100]="c",
}
for i=1 ,#mqkk do           --只会输出b,而我当时回答的是a
    print(mqkk[i])
end

for k,v in pairs(mqkk) do
    --print(k,v)
end

--[[
    面试官又问:那这个表使用ipairs和pairs来遍历结果又是如何呢?
    通过对第三个表的遍历得知:
        使用pairs: b 和 c 。
        使用ipairs :只输出 b。
    最后面试官问:那你知道ipairs和pairs的区别吗?    事后查找资料,然后有了此文档。
--]]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值