lua中pairs和ipairs的区别

本文详细介绍了在Lua编程语言中,ipairs与pairs函数的行为差异,特别是当处理包含非连续整数键的表时。通过具体示例展示了两者在遍历过程中的不同表现,以及如何处理表中的nil值。

主要在有key为整数的时候有区别.

注意数组默认的下标从1开始,比如a={"a","b","c","d"},和a={[1]="a",[2]="b",[3]="c",[4]="d"}是一样的.

local a = {  
"a","b","c","d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

所以ipair和pairs的结果都是

1    a
2    b
3    c
4    d


但是如果数组中的key和从1开始数的key不相同的话,或者是非整数,ipairs就此break,pairs不受影响.

local a = {  
"a",[2]="b",[4]="c",[5]="d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

pairs输出

1    a
2    b
4    c
5    d

ipairs输出

1    a
2    b

应为"c"的key不是3,所以就中断了

以及

for k,v in pairs(a) do
  print(k,v)
end

也不会输出的


 

还有一点需要注意的是,数组的自动排序功能

如果改成这样

local a = {  
"a",[2]="b",[4]="c","d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

pairs输出

1    a
2    d
4    c

因为自动排序,先按照没key的给默认key,所以就变成{[1]="a",[2]="d",[2]="b",[4]="c"}

前面的[2]="d"会移除掉后面的,[2]="b",所以没有输出b

 

如果是pairs

1    a
2    d

应为[2]="b"被移除,[4]="c"不等于3,所以只输出

1    a
2    d


 

 如果table中有nil,pairs会跳过,ipairs会break掉

a={1,nil,3,4}
for k,v in ipairs(a) do
  print(k,v)
end

输入 1

a={1,nil,5,6}
for k,v in pairs(a) do
  print(k,v)
end

输出

1    1
3    5
4    6

解决办法是用select

a={1,nil,5,6}
for k,v in pairs(a) do
  print(k,v)
end

转载于:https://www.cnblogs.com/ptqueen/p/6759658.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值