3D图形编程

学无止尽

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  4 Posts :: 46 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿(2)

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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

下面举个例子:

  1. local tabFiles = {   
  2. [3] = "test2",   
  3. [6] = "test3",   
  4. [4] = "test1"  
  5. }   
  6. for k, v in ipairs(tabFiles) do  
  7.     print(k, v)   
  8. end  

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

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

那么,如果是

  1. for k, v in pairs(tabFiles) do  
  2.     print(k, v)   
  3. end  

则会输出所有:

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

现在改变一下表内容,

  1. local tabFiles = {   
  2. [1] = "test1",   
  3. [6] = "test2",   
  4. [4] = "test3"  
  5. }   
  6.   
  7. for k, v in ipairs(tabFiles) do  
  8.     print(k, v)   
  9. end  

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

  1. >lua -e "io.stdout:setvbuf 'no'" "test.lua"    
  2. 1 test1   
  3. >Exit code: 0  
  1. -- [[示例1.]] --   
  2. local tt =   
  3. {   
  4.     [1] = "test3",   
  5.     [4] = "test4",   
  6.     [5] = "test5"  
  7. }   
  8.   
  9. for i,v in pairs(tt) do     -- 输出 "test4" "test3" "test5"  
  10.     print( tt[i] )   
  11. end   
  12.   
  13. for i,v in ipairs(tt) do    -- 输出 "test3" k=2时断开   
  14.     print( tt[i] )   
  15. end   
  16.   
  17. -- [[示例2.]] --   
  18. tbl = {"alpha""beta", [3] = "uno", ["two"] = "dos"}   
  19.   
  20. for i,v in ipairs(tbl) do    --输出前三个   
  21.     print( tbl[i] )   
  22. end   
  23.   
  24. for i,v in pairs(tbl) do    --全部输出   
  25.     print( tbl[i] )   
  26. end  
posted on 2012-03-07 14:56 Nightsky 阅读(312) 评论(0)  编辑 收藏 引用 所属分类: LUA学习

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理