pairs和ipairs的区别

Posted Flytiger1220

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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不会停止输出;

以上是关于pairs和ipairs的区别的主要内容,如果未能解决你的问题,请参考以下文章

lua 中pairs 和 ipairs区别

Lua中pairs()和ipairs()的区别是啥?

Lua中ipairs和pairs的区别详解

ipairs与pairs的区别

lua中pairs和ipairs的区别

LuaLua中ipair和pair的区别