lua中pair和ipair的区别-kb88凯时官网登录

来自:
时间:2024-03-08
阅读:
免费资源网,https://freexyz.cn/

二者都是lua中内置的迭代器,可以对数组或table进行遍历。

在正常的数组或table的遍历中,二者没有区别。

tablenormal={"this","is","a","array"}
--使用 pairs 遍历
for key,val in pairs(tablenormal) do
    print(key,'==',val)
end

遍历结果:

lua中pair和ipair的区别

--使用 ipairs遍历
for key,val in ipairs(tablenormal) do
    print(key,'==',val)
end

遍历结果:

lua中pair和ipair的区别

二者没有任何差别!

之所以说是正常的数组,是因为索引是连续的,数值都是存在的,不存在nil的情况。

而如果索引不连续,或索引类型不是num,那么二者就显现出差别。再看,

  1. 索引类型为num,但不连续
table1={}
table1[1]="hello"
table1[2]="tony!"
table1[3]="this"
table1[6]="is"
--使用ipairs 遍历
for key,val in ipairs(table1) do
    print(key,'==',val)
end

结果:

lua中pair和ipair的区别

--使用pairs遍历
for key,val in pairs(table1) do
    print(key,'==',val)
end

结果:

lua中pair和ipair的区别

显然,使用pairs能对数组内容整体遍历。而ipairs只会访问连续的数字索引内容。

查看一下table长度(实际长度为4):

print("table1的长度",#table1)

lua中pair和ipair的区别

好,我们再看一个情况:

table2={[2]="welcome",[3]="to",[4]="my",[5]="blog"}
print("----------------ipairs-------------------------")
for key,val in ipairs(table2) do
    print(key,"==",val)
end

猜猜会打印什么?

什么也没有打印!可见ipairs只能从索引为1的位置遍历,且只能访问连续的索引区间。

lua中pair和ipair的区别

当然,pairs可以直接遍历咯!

for key,val in pairs(table2) do
    print(key,"==",val)
end

lua中pair和ipair的区别

--查看数组长度
print("table2长度====",#table2)

lua中pair和ipair的区别

可见长度的获取和ipairs有关。

我们可以自定义获取数组长度的函数

function tablesize(table)
    local size=0
    for k,v in pairs(table) do
        size=size 1
    end
    return size
end
print("table2长度====",tablesize(table2))

lua中pair和ipair的区别

  1. 对于索引类型为非nums的table来说,若想遍历直接使用pairs即可。

    tableabnormal={[1]="tonycode",index1="index1",i2="index2",s3="s3"}
    print("=============ipairs的执行结果=============")
    for i, v in ipairs(tableabnormal) do
        print(i, '=', v)
    end
    print("=============pairs的执行结果=============")
    for i, v in pairs(tableabnormal) do
        print(i, '=', v)
    end
    

    lua中pair和ipair的区别

    lua中pair和ipair的区别

    综上可知,ipairs适用于数值索引且连续的数组或table的遍历,而pairs对于不同元素类型的数组都适用。但是能使用ipairs尽可能使用,其性能更好。

    参考文章:

免费资源网,https://freexyz.cn/
返回顶部
顶部
网站地图