pairs和ipairs的区别

在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不会停止输出;

你可能感兴趣的:(Lua学习,lua,开发语言)