Lua中pair和ipair的区别
Lua中pair和ipair的区别?
二者都是Lua中内置的迭代器,可以对数组或table进行遍历。
在正常的数组或table的遍历中,二者没有区别。
tableNormal={"this","is","a","array"} --使用 pairs 遍历 for key,val in pairs(tableNormal) do print(key,'==',val) end
遍历结果:
--使用 ipairs遍历 for key,val in ipairs(tableNormal) do print(key,'==',val) end
遍历结果:
二者没有任何差别!
之所以说是正常的数组,是因为索引是连续的,数值都是存在的,不存在nil的情况。
而如果索引不连续,或索引类型不是num,那么二者就显现出差别。再看,
- 索引类型为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
结果:
--使用pairs遍历 for key,val in pairs(table1) do print(key,'==',val) end
结果:
显然,使用pairs能对数组内容整体遍历。而ipairs只会访问连续的数字索引内容。
查看一下table长度(实际长度为4):
print("table1的长度",#table1)
好,我们再看一个情况:
table2={[2]="welcome",[3]="to",[4]="my",[5]="blog"} print("----------------ipairs-------------------------") for key,val in ipairs(table2) do print(key,"==",val) end
猜猜会打印什么?
什么也没有打印!可见ipairs只能从索引为1的位置遍历,且只能访问连续的索引区间。
当然,pairs可以直接遍历咯!
for key,val in pairs(table2) do print(key,"==",val) end
--查看数组长度 print("table2长度====",#table2)
可见长度的获取和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))
-
对于索引类型为非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 综上可知,ipairs适用于数值索引且连续的数组或table的遍历,而pairs对于不同元素类型的数组都适用。但是能使用ipairs尽可能使用,其性能更好。
本文作者:畅知
本文链接:https://www.cnblogs.com/TonyCode/p/18061820
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业