在lua中ipairs 和pairs均可以用来遍历集合,但是两者有区别;
同:都是能遍历集合(表、数组),两者均优先按顺序输出没有key的值;
异:对于有key的集合:
ipairs从第一个数字key开始,依次输出所有的key+1的键值,遇到字母下标并不会结束遍历,只是不输出而已,如果遇到nil则退出;
pairs无序输出字母类型key或者数字类型key的键值,遇到nil不输出,但不会停止遍历;
例子1:
table = { [1] = "test3", [2] = "val1" , [5] = "val2", [4] = "val4" }
print("-----------ipairs----------------")
for k,v in ipairs(table) do
print(k,v)
end
print("-----------pairs----------------")
for k,v in pairs(table) do
print(k,v)
end
输出
-----------ipairs----------------
1 test3
2 val1
-----------pairs----------------
4 val4
1 test3
2 val1
5 val2
结论:
1、ipairs会按照key的顺序输出数据,遇到不连续的数据停止输出;
2、pairs会无序输出所有数据;
例子2:
table = { [3] = "test3", ["test"] = "val1", "val3" , [4] = "val2", "val4" }
print("-----------ipairs----------------")
for k,v in ipairs(table) do
print(k,v)
end
print("-----------pairs----------------")
for k,v in pairs(table) do
print(k,v)
end
输出
-----------ipairs----------------
1 val3
2 val4
3 test3
4 val2
-----------pairs----------------
1 val3
2 val4
4 val2
test val1
3 test3
结论:
1、pairs和ipairs均优先输出没有key的value;
2、pairs会输出所有的数据,不带key的值按顺序输出,带key的值无序输出;
3、ipairs会跳过字符串的key,按顺序输出数字型key的值;
例子3
table = { [6] = "test3", ["test"] = "val1", "val3" , [11] = "val2", nil, "val4" }
print("-----------ipairs----------------")
for k,v in ipairs(table) do
print(k,v)
end
print("-----------pairs----------------")
for k,v in pairs(table) do
print(k,v)
end
输出
-----------ipairs----------------
1 val3
-----------pairs----------------
1 val3
3 val4
11 val2
6 test3
test val1
结论:
1、ipairs遇到nil会停止输出;
2、pairs遇到nil不会停止输出;