博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua中pairs和ipairs的区别
阅读量:5912 次
发布时间:2019-06-19

本文共 2028 字,大约阅读时间需要 6 分钟。

标准库提供了集中迭代器,包括迭代文件每行的(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  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  for the caveats of modifying the table during its traversal.

 

这样就可以看出  ipairs以及pairs 的不同。

 

pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;

 

但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key

1 下面举个例子吧! 2   3  eg: 4 local tabFiles = { 5 [3] = "test2", 6 [6] = "test3", 7 [4] = "test1" 8 } 9  10 for k, v in ipairs(tabFiles) do11 print(k, v)12 end13  14  15 猜测它的输出结果是什么呢?16  17 根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。18  19 >lua -e "io.stdout:setvbuf 'no'" "Test.lua"20 >Exit code: 021  22 那么,如果是23 for k, v in pairs(tabFiles) do24 print(k, v)25 end26 则会输出所有 :27 >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 28 3 test229 6 test330 4 test131 >Exit code: 032 现在改变一下表内容,33 local tabFiles = {34 [1] = "test1",35 [6] = "test2",36 [4] = "test3"37 }38 for k, v in ipairs(tabFiles) do39 print(k, v)40 end41 现在的输出结果显而易见就是key=1时的value值test142  >lua -e "io.stdout:setvbuf 'no'" "Test.lua" 43 1 test144 >Exit code: 0 45 --[示例1.]--46 local tt =47 {48     [1] = "test3",49     [4] = "test4",50     [5] = "test5"51 }52 53 for i,v in pairs(tt) do        -- 输出 "test4" "test3" "test5"54     print( tt[i] )55 end56 57 for i,v in ipairs(tt) do    -- 输出 "test3" k=2时断开58     print( tt[i] )59 end60 61 62 63 64 65 -- [[示例2.]] --66 tbl = {
"alpha", "beta", [3] = "uno", ["two"] = "dos"}67 68 for i,v in ipairs(tbl) do --输出前三个69 print( tbl[i] )70 end71 72 for i,v in pairs(tbl) do --全部输出73 print( tbl[i] )74 end

 

转自

转载于:https://www.cnblogs.com/SmileYG/p/3266356.html

你可能感兴趣的文章
Magento(CE1.X)自带模块解析五
查看>>
linux基础
查看>>
Factory Method模式 (一)
查看>>
java正则表达式的学习
查看>>
Linux 环境变量的配置解决(-bash: jps: command not found)问题
查看>>
redis遇到过的问题汇总(持续更新)
查看>>
组策略无法正常应用
查看>>
[转载]Monit:开源服务器监控工具
查看>>
Linux 打印 颜色显示
查看>>
dubbo请求调用过程分析
查看>>
Oracle学习(一):Oracle数据库基础
查看>>
27. Python对Mysql的操作(2)
查看>>
Linux 中用 strace 追踪系统调用和信号值
查看>>
JAVASE贪吃蛇开发记录
查看>>
mysql全文索引____ft_min_word_len
查看>>
Shiro的记住我功能失效原因
查看>>
yum方式安装mysql报错找不到mysql.sock
查看>>
PrestaShop支付接口-网银在线支付,在线支付收款,外贸收款
查看>>
JAVA 实现 基于RSA算法的签名验签
查看>>
CA ARCserve Backup系列(2)—安装代理(windows篇)
查看>>