现在的位置: 首页lua>正文
rss
lua 中 pairs 和 ipairs 的区别
2012年01月30日 lua 评论数 3 ⁄ 被围观 21,191 次+

luapairsipairs的区别

ipairs (t)

returns three values: an iterator function, the tablet, and 0, so that the construction

for i,v in ipairs(t) dobodyend

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: thenextfunction, the tablet, andnil, so that the construction

for k,v in pairs(t) dobodyend

will iterate over all key╟value pairs of tablet.

see functionnextfor the caveats of modifying the table during its traversal.

这样就可以看出 ipairs以及pairs 的不同。pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil;但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出。它只能遍历到表中出现的第一个不是整数的key

下面举个例子

  1. localtabfiles={
  2. [3]="test2",
  3. [6]="test3",
  4. [4]="test1"
  5. }
  6. fork,vinipairs(tabfiles)do
  7. print(k,v)
  8. end

猜测它的输出结果是什么呢?根据刚才的分析,它在 ipairs(tabfiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

  1. >lua-e"io.stdout:setvbuf'no'""test.lua"
  2. >exitcode:0

那么,如果是

  1. fork,vinpairs(tabfiles)do
  2. print(k,v)
  3. end

则会输出所有:

  1. >lua-e"io.stdout:setvbuf'no'""test.lua"
  2. 3test2
  3. 6test3
  4. 4test1
  5. >exitcode:0

现在改变一下表内容,

  1. localtabfiles={
  2. [1]="test1",
  3. [6]="test2",
  4. [4]="test3"
  5. }
  6. fork,vinipairs(tabfiles)do
  7. print(k,v)
  8. end

现在的输出结果显而易见就是key=1时的value值test1

  1. >lua-e"io.stdout:setvbuf'no'""test.lua"
  2. 1test1
  3. >exitcode:0
  1. --[[示例1.]]--
  2. localtt=
  3. {
  4. [1]="test3",
  5. [4]="test4",
  6. [5]="test5"
  7. }
  8. fori,vinpairs(tt)do--输出"test4""test3""test5"
  9. print(tt[i])
  10. end
  11. fori,vinipairs(tt)do--输出"test3"k=2时断开
  12. print(tt[i])
  13. end
  14. --[[示例2.]]--
  15. tbl={"alpha","beta",[3]="uno",["two"]="dos"}
  16. fori,vinipairs(tbl)do--输出前三个
  17. print(tbl[i])
  18. end
  19. fori,vinpairs(tbl)do--全部输出
  20. print(tbl[i])
  21. end

本文地址:/00/1038.html
如非注明则为本站原创文章,欢迎转载。转载请注明转载自:moon's blog
 

目前有 3 条留言 其中:访客:3 条, 博主:0 条


  1. fatal error: maximum execution time of 30 seconds exceeded in c:\phpnow-1.5.6\vhosts\www.xinqingchina.com\wp-includes\class-http.php on line 1156