Lua-泛型for循环 pairs和ipairs的区别
先看一段简单的代码:
local mytable = {1,2,aa = "abc",subtable = {},4,6 } --for循环1 print("for --- index") for i=1,#mytable doprint(i) end--for循环2 print("for ---- index-value") for i,v in ipairs(mytable) doprint(i,v) end--for循环3 print("for ---- key-value") for k,v in pairs(mytable) doprint(k,v) end
输出结果:
for --- index 1 2 3 4 for ---- index-value 1 1 2 2 3 4 4 6 for ---- key-value 1 1 2 2 3 4 4 6 subtable table: 0x7f82d8d07660 aa abc
3种for循环的结果各不相同,我们这里对后两种进行一下比较。
看一下,关于pairs和ipairs的定义:
pairs (t)
If
t
has a metamethod__pairs
, calls it witht
as argument and returns the first three results from the call.Otherwise, returns three values: the
next
function, the tablet
, and nil, so that the constructionfor k,v in pairs(t) do body endwill iterate over all key–value pairs of table
t
.See function
next
for the caveats of modifying the table during its traversal.
- 如果table 含有元方法__pairs,返回它的前三个结果;
- 否则,返回函数next,table,nil;
- 会迭代table中所以键值对;
ipairs (t)
Returns three values (an iterator function, the table
t
, and 0) so that the constructionfor i,v in ipairs(t) do body endwill iterate over the key–value pairs (
1,t[1]
), (2,t[2]
), ..., up to the first nil value.
- 返回一个迭代器函数,table,0;
- 会从key=1开始迭代table中的键值对,直到遇到第一个nil value;
例如:
local mytable2 = {[2] = "b",[3] = "c" } for i,v in ipairs(mytable2) doprint(i,v) end
这里什么都不会输出,当迭代key=1的键值对时,value=nil,直接跳出;
所以:
- 使用pairs(t)会遍历所以key-value,但是它是无序的(不保证按照table元素的列举顺序遍历,和key的哈希值有关);
- 使用ipairs(t)会从key=1,2,3...这样的顺序遍历,保证顺序,不保证遍历完全;
所以要根据不同的需求,使用不同的方法。
转载于:https://www.cnblogs.com/zzya/p/5778125.html
Lua-泛型for循环 pairs和ipairs的区别相关推荐
- Lua中 pairs 和 ipairs 的区别
Lua中 pairs 和 ipairs 的区别 在我看来,pairs就是粗略计算,ipairs就是仔细计算. pairs只关注存在还是不存在,而ipairs还要关注存在是否合理. pairs将存在的值 ...
- lua中, pairs和ipairs的区别
函数pairs和ipairs都是实现遍历功能的函数,通常使用方法是和for函数共同使用构造for u,v in pairs/ipairs(t)实现遍历t表中的所有元素对. 区别在于,pairs可以 ...
- pairs和ipairs的区别
在lua中ipairs 和pairs均可以用来遍历集合,但是两者有区别: 同:都是能遍历集合(表.数组),两者均优先按顺序输出没有key的值: 异:对于有key的集合: ipairs从第一个数字key ...
- lua中pairs和ipairs的区别
在lua中,pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil; 但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出.它只能遍历到表中出现的第一个 ...
- Lua语言中pairs和ipairs的区别
tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...
- for循环中pairs与ipairs的区别与联系
其实区别非常的简单: pairs:pairs可以遍历table中所有的key和value. ipairs:下标从1开始遍历table,然后累加1,如果某个元素下标不存在就终止遍历,这就导致如果下标不是 ...
- Lua中,泛型for循环遍历table时,ipairs和pairs的区别
根据table型变量key是否为连续数字,如果是则称为数组型table,如果不是则称为非数组型table. 事实胜于雄辩,接下来通过实验来区分两组迭代器的区别. 首先给出pairs和ipairs在数组 ...
- 泛型lua的for循环以及lua的特殊的dowhile循环
范型for循环: -- print all values of array 'a' a={1,2,3,4,5,6,7}; for i,v in ipairs(a) do print(v) end 范型 ...
- Lua——迭代器的使用、pairs 和 ipairs区别
--迭代器是一种可以便利一种集合中所有元素得机制 --lua中,迭代器表示为函数,每调用一次函数,即返回集合中得下一个元素 --主要是根据闭合函数来实现得:闭合函数:一个函数加上该函数所需要访问得所有 ...
最新文章
- mysql远程权限grant_mysql 赋给用户远程权限 grant all privileges on
- C# 加载图片image --(C#)Image.FromFile 方法会锁住文件的原因及可能的解决方法
- 013_Vue监听器
- jdk安装好后没有jre,手动生成jre
- linux下的crontab
- c语言规定在一个源程序中main函数的位置是什么?
- P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles(记忆化搜索)--- 89分
- php 汉字转拼音及获取拼音首字母
- poj2752Seek the Name, Seek the Fame【kmp next数组应用】
- ORACLE的SQL练习---7. 拼接字符串
- UDP数据包大小设定
- 【精读AI论文】inceptionV2 BN-inception Batch Normalization BN 批量标准化
- ❤ ❤响应式小米官网源码!!!(js+css+html)❤ ❤
- U盘写保护修复(亲测可用)
- css字的大小,css 中字体大小
- “远程网络教学系统”UML用例图(练习题)
- oracle创建一个永久性表空间,oracle创建表空间
- 5.Fabric v2.0 java-sdk 根据TXID查询区块并从区块解析数据
- android数据球图,Android OpenGL球体贴图
- 神经网络种类及应用领域,常用的神经网络有哪些