lua 中pairs 和 ipairs区别
来源:互联网 发布:aso的排名算法 编辑:程序博客网 时间:2024/06/05 03:22
lua 中pairs 和 ipairs区别
标准库提供了集中迭代器,包括迭代文件每行的(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
- 则会输出所有 :
- >lua -e "io.stdout:setvbuf 'no'" "Test.lua"
- 3 test2
- 6 test3
- 4 test1
- >Exit code: 0
- 现在改变一下表内容,
- local tabFiles = {
- [1] = "test1",
- [6] = "test2",
- [4] = "test3"
- }
- for k, v in ipairs(tabFiles) do
- print(k, v)
- end
- 现在的输出结果显而易见就是key=1时的value值test1
- >lua -e "io.stdout:setvbuf 'no'" "Test.lua"
- 1 test1
- >Exit code: 0
- --[示例1.]--
- local tt =
- {
- [1] = "test3",
- [4] = "test4",
- [5] = "test5"
- }
- for i,v in pairs(tt) do -- 输出 "test4" "test3" "test5"
- print( tt[i] )
- end
- for i,v in ipairs(tt) do -- 输出 "test3" k=2时断开
- print( tt[i] )
- end
- -- [[示例2.]] --
- tbl = {"alpha", "beta", [3] = "uno", ["two"] = "dos"}
- for i,v in ipairs(tbl) do --输出前三个
- print( tbl[i] )
- end
- for i,v in pairs(tbl) do --全部输出
- print( tbl[i] )
- end
0 0
- Lua中 Pairs和ipairs的区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- 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中pairs和ipairs的区别
- lua 中pairs 和 ipairs的区别
- lua 中pairs 和 ipairs区别
- lua 中pairs 和 ipairs区别
- android unknown offline
- 【源码分享】-c#界面源代码分享
- js----Number对象
- Nginx源码main函数解读
- NetBeans8.0启动tomcat8.1.15失败--'127.0.0.1' 不是内部或外部命令
- lua 中pairs 和 ipairs区别
- 【EDMA】DMA_TCDn_NBYTES寄存器的多种映射解析
- 关于OC与swift混编时-swift.h更新问题
- MySQL Database on Azure - 利用PowerShell快速创建使用数据库服务
- Windows Azure-2.5天深度技术训练营
- ios 之contentmode
- AFNetwork 2.0在请求时报错code=-1016 和 3840
- [深入浅出Cocoa]Block编程值得注意的那些事儿
- 初探swift语言的学习笔记九(OC与Swift混编)