Lua 中 ipairs 遍历与索引的关系

ipairs是lua中的一个迭代器,专门用来遍历表中的元素,并且键只能是正整数(>0)

ipairs只能同时遍历键和值,不能只遍历键

遍历规则

先遍历非自定义索引,如果自定义索引的序号能和非自定义索引连接上,则继续遍历,直到索引断开

纯非自定义索引

a = {1, 2, 3}
for i,j in ipairs(a) do
	print("i:"..i.."j:"..j)
end

结果依次打印出键值

对于非自定义索引来说,ipairs按照从左往右的顺序进行遍历,很容易理解

纯自定义索引

b = {[1] = 1, [2] = 2, [3] = 3}
for i,j in ipairs(b) do
	print("i:"..i.."j:"..j)
end

结果:

对于连续自定义索引来说,依旧按照从左往右的顺序遍历

b = {[1] = 1, [2] = 2, [4] = 3}
for i,j in ipairs(b) do
	print("i:"..i.."j:"..j)
end

结果:

对于不连续自定义索引来说,会在连续序列断开的位置停止遍历,此例中从2的位置断开

自定义索引和非自定义索引混合

a = {[-1] = -1, [0] = 0, 2, 3, [4] = 5, 6}
for i,j in ipairs(a) do
	print("i:"..i.."j:"..j)
end

结果:

在自定义索引和非自定义索引同时存在的情况下,会优先遍历非自定义索引序列,之后再遍历自定义索引序列

本例中的遍历顺序:

(索引为1)2,(2)3,(3)6   此时已经遍历完非自定义索引序列,索引到3

下一个索引应该为4,在自定义索引中找到[4] = 5,因此第4个遍历元素应该为(4) 5

结果为:2 3 6 5

a = {[4]="hello",2,[5]=3,4,5,[7] = 9}
for i,j in ipairs(a) do
	print("i:"..i.."j:"..j)
end

结果:

先遍历非自定义序列, (1)2,(2)4,(3)5

然后遍历自定义序列,从索引4开始,(4)hello,(5)3

此时自定义索引还剩下[7] = 9,而下一个连续索引应该是6,在此处断开,所有遍历终止

结果为:2 4 5 hello 3

                                   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值