lua中pairs和ipairs的区别

简单生活 简单生活     2022-08-29     118

关键词:

主要在有key为整数的时候有区别.

注意数组默认的下标从1开始,比如a={"a","b","c","d"},和a={[1]="a",[2]="b",[3]="c",[4]="d"}是一样的.

local a = {  
"a","b","c","d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

所以ipair和pairs的结果都是

1    a
2    b
3    c
4    d


但是如果数组中的key和从1开始数的key不相同的话,或者是非整数,ipairs就此break,pairs不受影响.

local a = {  
"a",[2]="b",[4]="c",[5]="d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

pairs输出

1    a
2    b
4    c
5    d

ipairs输出

1    a
2    b

应为"c"的key不是3,所以就中断了

以及

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

也不会输出的


 

还有一点需要注意的是,数组的自动排序功能

如果改成这样

local a = {  
"a",[2]="b",[4]="c","d"
}  
   
for k, v in pairs(a) do  
print(k, v)  
end  

pairs输出

1    a
2    d
4    c

因为自动排序,先按照没key的给默认key,所以就变成{[1]="a",[2]="d",[2]="b",[4]="c"}

前面的[2]="d"会移除掉后面的,[2]="b",所以没有输出b

 

如果是pairs

1    a
2    d

应为[2]="b"被移除,[4]="c"不等于3,所以只输出

1    a
2    d

 

lua中,泛型for循环遍历table时,ipairs和pairs的区别(代码片段)

为了看出两者的区别,首先定义一个table: a="Hello","World";a=1,b=2,z=3,x=10,y=20;"Good","Bye"使用ipairs对其进行遍历: fori,vinipairs(a)doprint(v)end输出的结果是:HelloWorldGoodBye可见ipairs并不会输出table中存储的键值对,会跳过键值对,然... 查看详情

lua中ipairs和pairs的区别详解(代码片段)

迭代器for遍历table时,ipairs和pairs的区别:区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去区别二:locala="Hello","World",a=1,b=2,x=10,y=20,"Good",nil,"Bye"--fori,vinipairs(a)do--print(v)--endfork,vinpairs(a)doprint(k,v)end可见:ipairs并不会输出ta... 查看详情

pairs和ipairs的区别(代码片段)

在lua中ipairs和pairs均可以用来遍历集合,但是两者有区别;同:都是能遍历集合(表、数组),两者均优先按顺序输出没有key的值;异:对于有key的集合:ipairs从第一个数字key开始,依次输... 查看详情

ipairs与pairs的区别

ipairs和pairs在lua中都是遍历tbale的函数可是两者有差别 1.pairs遍历table中的全部的key-vale而ipairs会依据key的数值从1開始加1递增遍历相应的table[i]值如:table1=key1="val1",key2="val2","val3"pairs会优先输出没有键的值,即先输出"val3",再... 查看详情

lualua中ipair和pair的区别

pairs会遍历table的所有键值对。而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。顺便说下,记忆也很简单,带i的就是根据integerkey值从1开始遍历的。请看个例子。tb={"oh",[3]="god","my",[... 查看详情

lua特性

...类型:nil,boolean,number,string,userdata,function,table;5.pairs和ipairs区别:pairs:迭代table,遍历表中所有的KEY,可以返回nil;ipairs:迭代数 查看详情

lua中易混淆函数

lua中易混淆的函数ipairs和pairs:ipairs只能顺序遍历table,遇到key不是数字就会退出pairs可以遍历table中所有元素---------------------------------------------------------------------pcall和xpcallpcall格式:pcall(function,...)运行函数返回true或false,不能 查看详情

lua教程

...达式Lua中的语句Lua中的函数Lua中的闭包Lua中pairs和ipairs的区别Lua中的迭代器与泛型forLua中的协同程序Lua中__index和__newindex实践Lua中的元表与元方法Lua中的环境概念Lua中的模块与包Lua中的面向对象编程Lua中的一些库(1)Lua中的一些... 查看详情

pairs和ipairs异同(代码片段)

 同:都是能遍历集合(表、数组)异:ipairs仅仅遍历值,按照索引升序遍历,索引中断停止遍历。即不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到集合中出现的第一个不是整数的key。pairs能遍历集合的所有... 查看详情

第9月第26天pairs和ipairs

1.a={ip="127.0.0.1",port=6789}fori,vinpairs(a)doprint(i,v)end a={1}fori,vinipairs(a)doprint(i,v)endhttp://blog.csdn.net/witch_soya/article/details/7556595 查看详情

lua语言中是不是可以在table中存储函数

... do    -- ipairs 和 pairs 的区别在于index是否为连续整数    print(v)end参考技术A可以用数字下标放但我们更常用的方法是以字符串做下标lo 查看详情

lua笔记——4.环境environment(代码片段)

...Lua在全局环境_G中添加了标准库比如math、函数比如pairs、ipairs等,可以使用以下代码打印当前环境中所有全局变量的名称:forninpairs(_G)doprint(n)en 查看详情

lua中.和:的区别(代码片段)

lua中.和:的区别首先在lua中使用“:”定义的函数会自动传入一个名为self的变量,这个变量是隐含的,self同c++中的this一样,表示当前对象的指针:而“.”定义的函数中没有self。functionclass:func2()endfunctionclass.f... 查看详情

只有两个成员的 std::pair 和 std::tuple 之间的区别?

】只有两个成员的std::pair和std::tuple之间的区别?【英文标题】:Differencebetweenstd::pairandstd::tuplewithonlytwomembers?【发布时间】:2011-10-0422:50:54【问题描述】:std::pair和只有两个成员的std::tuple之间有区别吗?(除了std::pair需要两个而... 查看详情

lua中调用函数使用点号和冒号的区别

...种形式,是让我们随便挑的意思吗? 这两种形式是有区别的,区别很大,但只有一个。不过,暂时不解释,后面再介绍。2.最简单 查看详情

lua中local变量和非local变量的区别

示栗代码:localmyClass={m=10,n=11}functionmyClass:new()localself={}setmetatable(self,{__index=myClass})returnselfendlocala=0localb=0localc=0myClass.a=1myClass.b=2myClass.c=3a=4b=5c=6d=7e=8f=9print(myClass. 查看详情

andlua和lua的区别

参考技术Aandlua就是一个不错的脚本编辑器,它上面可以直接运行代码的,还可以对你写的程序进行测试,专为开发人员打造的,里面还能为你提供新手教程说明书。lua。Lua是一个小巧的脚本语言。它是巴西里约热内卢天主教大... 查看详情

面试中常被问到(25)map和pair区别

1,pair的类型:pair是一种模版类型。每个pair可以存储两个值。这两种值的类型没有限制,也可以自定义类型。2、pair应用:如果一个函数有两个返回值的话,如果是相同类型,就可以用数组返回,如果... 查看详情