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

lua 中pairs 和 ipairs区别

发布时间:2020-12-14 21:52:23 所属栏目:大数据 来源:网络整理
导读:lua 中pairs 和 ipairs区别 2012年05月11日 11:13:03 阅读数:98037 lua 中pairs 和 ipairs区别 标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的? (string.gmatch)等等。LUA手

lua 中pairs 和 ipairs区别

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,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

?

[cpp] view plain copy
  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. ???
  15. 猜测它的输出结果是什么呢???
  16. ???
  17. 根据刚才的分析,它在?ipairs(tabFiles)?遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。??
  18. ???
  19. >lua?-e?"io.stdout:setvbuf?‘no‘"?"Test.lua"??
  20. >Exit?code:?0??
  21. ???
  22. 那么,如果是??
  23. for?k,?v?in?pairs(tabFiles)?do??
  24. print(k,?v)??
  25. end??
  26. 则会输出所有?:??
  27. >lua?-e?"io.stdout:setvbuf?‘no‘"?"Test.lua"???
  28. 3?test2??
  29. 6?test3??
  30. 4?test1??
  31. >Exit?code:?0??
  32. 现在改变一下表内容,??
  33. local?tabFiles?=?{??
  34. [1]?=?"test1",??
  35. [6]?=?"test2",??
  36. [4]?=?"test3"??
  37. }??
  38. for?k,?v)??
  39. end??
  40. 现在的输出结果显而易见就是key=1时的value值test1??
  41. ?>lua?-e?"io.stdout:setvbuf?‘no‘"?"Test.lua"???
  42. 1?test1??
  43. >Exit?code:?0???
  44. --[示例1.]--??
  45. local?tt?=??
  46. {??
  47. ????[1]?=?"test3",??
  48. ????[4]?=?"test4",??
  49. ????[5]?=?"test5"??
  50. }??
  51. ??
  52. for?i,v?in?pairs(tt)?do????????--?输出?"test4"?"test3"?"test5"??
  53. ????print(?tt[i]?)??
  54. end??
  55. ??
  56. for?i,v?in?ipairs(tt)?do????--?输出?"test3"?k=2时断开??
  57. ????print(?tt[i]?)??
  58. end??
  59. ??
  60. ??
  61. ??
  62. ??
  63. ??
  64. --?[[示例2.]]?--??
  65. tbl?=?{"alpha",?"beta",?[3]?=?"uno",?["two"]?=?"dos"}??
  66. ??
  67. for?i,v?in?ipairs(tbl)?do????--输出前三个??
  68. ????print(?tbl[i]?)??
  69. end??
  70. ??
  71. for?i,v?in?pairs(tbl)?do????--全部输出??
  72. ????print(?tbl[i]?)??
  73. end??

http://www.cppblog.com/wc250en007/archive/2011/12/16/162203.html

(编辑:李大同)

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

    推荐文章
      热点阅读