Lua中的不同迭代器(pairs、ipairs)
来源:互联网 发布:android启动优化 编辑:程序博客网 时间:2024/05/16 12:07
Lua 的基础库提供了ipairs,这个遍历数组的迭代器函数。
在每次循环中,i会被赋予一个索引值,同时v被赋予一个队应该索引值的数组元素值。
标准库提供了几种迭代器,包括用于迭代文件中个的
每行(io.lines)、
迭代table元素(pairs)、
迭代数组元素的(ipairs)、
迭代字符串中的单词(string.gmatch)
还可以编写自己的迭代器。
这几天在看LUA,只是记录下自己的一点小小心得。这篇是分析 LUA泛型for中提供的ipairs以及pairs的不同。
标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的
(string.gmatch)等等。LUA手册中对与pairs,ipairs解释如下:
ipairs (t)
Returns three values: an iterator function, the table t
, and 0, so that the construction
for i,v in ipairs(t) do body end
will iterate over the pairs (1,t[1]
), (2,t[2]
), ···, up to the first integer key absent from the table.
pairs (t)
Returns three values: the next
function, the table t
, and nil, so that the construction
for k,v in pairs(t) do body end
will iterate over all key–value pairs of table t
.
See function next
for the caveats of modifying the table during its traversal.
这样就可以看出 ipairs以及pairs 的不同。
pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;
但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key
下面举个例子吧!
eg:
local tabFiles = { [3] = "test2", [6] = "test3", [4] = "test1"} for k, v in ipairs(tabFiles) do print(k, v)end
猜测它的输出结果是什么呢?
根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
>Exit code: 0
那么,如果是
for k, v in pairs(tabFiles) do print(k, v)end
local tabFiles = { [1] = "test1", [6] = "test2", [4] = "test3"}for k, v in ipairs(tabFiles) do print(k, v)end
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
1 test1
>Exit code: 0
- Lua中的不同迭代器(pairs、ipairs)
- Lua中的pairs们(pairs,ipairs,gmatch)
- lua中的pairs和ipairs
- 【Lua】pairs 和 ipairs
- Lua:ipairs/pairs
- lua pairs和ipairs区别
- lua 中pairs 与 ipairs
- Lua -- pairs和ipairs区别
- LUA中pairs和ipairs的区别(收藏)
- 【LUA学习】ipairs和pairs的区别
- Lua pairs与ipairs效率分析
- Lua中 Pairs和ipairs的区别
- lua 中pairs 和 ipairs区别
- lua ipairs和pairs的区别 .
- lua 循环pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- 进程基本概念
- 基于U盘的小型linux桌面系统1
- 判断互质,求最大公约数、最小公倍数算法
- oracle ORA-00911:无效字符
- 其他机器访问本机django项目
- Lua中的不同迭代器(pairs、ipairs)
- 字节对齐 内存对齐问题详解
- myeclipse连接配置mysql
- c++用动态创建二维数组的几种方法
- 简单表达式求值的C++代码(10以内不包含括号的加减乘除)
- hdu 2191 多重背包
- ttttt
- 数据库无法复制
- IE 下 js文件 中文乱码解决