小羊驼和你一起学习cocos2d-x与lua之一(迭代器pairs 和 ipairs区别)

标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的

(string.gmatch)等等



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

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

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

你可能感兴趣的:(小羊驼和你一起学习cocos2d-x与lua之一(迭代器pairs 和 ipairs区别))