在对lua tbl做循环处理的时候,经常会用的pairs和ipairs,两者的具体区别mark下
ipairs:
for i,v in ipairs(t) do body end
will iterate over the pairs (1,t[1]), (2,t[2]), ···, up to the first integer key absent from the table.
即 ipairs 是从t[1]开始,不断获取t[2],t[3]....直到第一个非连续整形key出现即停止。
local aa = {
[2] = "111",
[3] = "333",
[4] = "555",
}
for k,v in ipairs(aa) do
print (k,v)
end
这个执行结果是
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
>Exit code: 0
因为aa[1] 为 nil直接结束循环
local aa = {
[1] = "111",
[3] = "333",
[4] = "555",
}
for k,v in ipairs(aa) do
print (k,v)
end
这个返回的结果为
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
1 111
>Exit code: 0
这个aa[1]存在,aa[2]不存在即结束了循环
而对于pairs就简单多了
for k,v in pairs(t) do body end
will iterate over all key–value pairs of table t.
即 pairs(t) 返回所有的 key-value对,示例:
do
local aa = {
[1] = "111",
[3] = "333",
[4] = "555",
}
for k,v in pairs(aa) do
print (k,v)
end
end
结果如下:
>lua -e "io.stdout:setvbuf 'no'" "test.lua"
1 111
4 555
3 333
>Exit code: 0
所以,一般情况下,还是用pairs比较好些!