加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua 中pairs 和 ipairs区别

发布时间:2020-12-14 21:59:28 所属栏目:大数据 来源:网络整理
导读:标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 ? (string.gmatch)等等。LUA手册中对与pairs,ipairs解释如下: ipairs (t) Returns three values: an iterator function,the t

标准库提供了集中迭代器,包括迭代文件每行的(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,and?nil,255)">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

?

[cpp]? view plain copy print ?
  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)?do??
  11. print(k,?v)??
  12. end??
  13. 猜测它的输出结果是什么呢???
  14. 根据刚才的分析,它在?ipairs(tabFiles)?遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。??
  15. >lua?-e?"io.stdout:setvbuf?'no'"?"Test.lua"??
  16. >Exit?code:?0??
  17. 那么,如果是??
  18. do??
  19. print(k,?v)??
  20. end??
  21. 则会输出所有?:??
  22. >lua?-e?"io.stdout:setvbuf?'no'"?"Test.lua"???
  23. 3?test2??
  24. 6?test3??
  25. 4?test1??
  26. >Exit?code:?0??
  27. 现在改变一下表内容,??
  28. local?tabFiles?=?{??
  29. [1]?=?"test1",108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; font-size:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> [6]?=?"test2",248); line-height:20px; font-size:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> [4]?=?"test3"??
  30. }??
  31. 现在的输出结果显而易见就是key=1时的value值test1??
  32. ?>lua?-e?"io.stdout:setvbuf?'no'"?"Test.lua"???
  33. 1?test1??
  34. >Exit?code:?0???
  35. --[示例1.]--??
  36. local?tt?=??
  37. {??
  38. ????[1]?=?"test3",108); list-style:decimal-leading-zero outside; color:inherit; line-height:20px; font-size:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> ????[4]?=?"test4",248); line-height:20px; font-size:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> ????[5]?=?"test5"??
  39. ??
  40. for?i,v?in?pairs(tt)?do????????--?输出?"test4"?"test3"?"test5"??
  41. ????print(?tt[i]?)??
  42. do????--?输出?"test3"?k=2时断开??
  43. ??
  44. --?[[示例2.]]?--??
  45. tbl?=?{"alpha",?"beta",?[3]?=?"uno",?["two"]?=?"dos"}??
  46. do????--输出前三个??
  47. ????print(?tbl[i]?)??
  48. do????--全部输出??
  49. end??

原文来自:http://www.voidcn.com/article/p-hanqmlxa-dy.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读