欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lua中, pairs和ipairs的区别

程序员文章站 2024-03-17 23:32:34
...

函数pairs和ipairs都是实现遍历功能的函数,通常使用方法是和for函数共同使用构造for u,v in pairs/ipairs(t)实现遍历t表中的所有元素对。

区别在于,pairs可以遍历到表中所有的key,对于key的类型没有要求,遇到nil时可以跳过,不会影响后面的遍历

ipairs遍历时只能取key为整数值,遇到nil时终止遍历

代码来了!

1.当表中的元素对key值均为默认时,pairs和ipairs遍历结果相同(pairs遍历结果中元素对顺序可能改变)

testTable = 
{
    "js",
    "lua", 
    "python",
    "c++"
}

for k,v in pairs(testTable) do
    print(k,v)
end

print("----------------")

for k,v in ipairs(testTable) do
    print(k,v)
end

结果:


 F:\>lua test.lua
1       js
2       lua
3       python
4       c++
----------------
1       js
2       lua
3       python
4       c++

2.当表中加入了nil后,pairs不受影响,ipairs从nil处终止

testTable = 
{
    "js",
    "lua", 
    "python",
    nil,
    "c++"
}

for k,v in pairs(testTable) do
    print(k,v)
end

print("----------------")

for k,v in ipairs(testTable) do
    print(k,v)
end

结果:

F:\>lua test.lua
1       js
2       lua
3       python
5       c++
----------------
1       js
2       lua
3       python

3.在表中加入了key值不为整数型的元素对后,pairs不受影响,ipairs则无法取到这个key

testTable = 
{
    "js",
    "lua", 
    "python",
    this = "C#",
    "c++"
}

for k,v in pairs(testTable) do
    print(k,v)
end

print("----------------")

for k,v in ipairs(testTable) do
    print(k,v)
end

结果

F:\>lua test.lua
1       js
2       lua
3       python
4       c++
this    C#
----------------
1       js
2       lua
3       python
4       c++