Lua中 pairs和ipairs都是Lua默认提供的迭代函数。
相同之处:都是能遍历集合(表、数组)
不同之处:ipairs 仅仅遍历值,按照索引升序遍历,索引中断停止遍历。不能返回 nil,如果遇到 nil 则退出。它只能遍历到集合中出现的第一个不是整数的 key。
pairs 能遍历集合的所有元素。即 pairs 可以遍历集合中所有的 key,并且除了迭代器本身以及遍历表本身还可以返回 nil。
例子1
local tab = {
[1] = "a",
[3] = "b",
[4] = "c"
}
for k, v in ipairs(tab) do
print(k, v)
end
输出 1 a ,在key等于2处断开。
例子2
local tab = {
[2] = "a",
[3] = "b",
[4] = "c"
}
for k, v in ipairs(tab) do
print(k, v)
end
什么都没输出,为什么?因为控制变量初始值是按升序来遍历的,当key为1时,value为nil,此时便停止了遍历, 所有什么结果都没输出。
例子3
local tab= {
[2] = "a",
[3] = "b",
[4] = "c"
}
for k, v in pairs(tab) do
print(k, v)
end
输出2 a, 3 b, 4 c。
例子4
local tab = {"a", "b", [3] = "c", ["two"] = "d"}
for i,v in ipairs(tab) do
print( tab [i] )
end
for i,v in pairs(tab) do
print( tab [i] )
end
上边输出a,b,c。
下边输出a,b,c,d。