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