好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Lua中ipairs()和pairs()的区别与使用

Lua中ipairs()和pairs()的区别与使用

Learn and share

Lua中ipairs()和pairs()的区别与使用

关于ipairs()和pairs(),Lua官方手册是这样说明的:

pairs (t)

If  t  has a metamethod  __pairs , calls it with  t  as argument and returns the first three results from the call.

Otherwise, returns three values: the  next  function, the table  t , 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 (t)

If  t  has a metamethod  __ipairs , calls it with  t  as argument and returns the first three results from the call.

Otherwise, 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会遍历表中所有的key-value值,而pairs会根据key的数值从1开始加1递增遍历对应的table[i]值,直到出现第一个不是按1递增的数值时候退出。

下面我们以例子说明一下吧

stars = {[1] = "Sun", [2] = "Moon", [5] = 'Earth'}

for i, v in pairs(stars) do

   print(i, v)

end

使用pairs()将会遍历表中所有的数据,输出结果是:

1    Sun
2    Moon
5    Earth

如果使用ipairs()的话,

for i, v in ipairs(stars) do

   print(i, v)

end

当i的值遍历到第三个元素时,i的值为5,此时i并不是上一个次i值(2)的+1递增,所以遍历结束,结果则会是:

1    Sun
2    Moon

ipairs()和pairs()的区别就是这么简单。

还有一个要注意的是pairs()的一个问题,用pairs()遍历是[key]-[value]形式的表是随机的,跟key的哈希值有关系。看以下这个例子:

stars = {[1] = "Sun", [2] = "Moon", [3] = "Earth", [4] = "Mars", [5] = "Venus"}

for i, v in pairs(stars) do

   print(i, v)

end

结果是:

2    Moon
3    Earth
1    Sun
4    Mars
5    Venus

并没有按照其在表中的顺序输出。

但是如果是这样定义表stars的话

stars = {"Sun", "Moon",  “Earth”, "Mars",  "Venus"}

结果则会是

1    Sun
2    Moon
3    Earth
4    Mars
5    Venus

你清楚了吗?:)

当前标签: C++

 

链接   Nick Yang 2013-03-08 13:01 阅读:1 评论:0   

 

内存对齐   Nick Yang 2013-02-27 21:45 阅读:119 评论:0   

 

do...while(0)的妙用   Nick Yang 2012-11-22 22:57 阅读:192 评论:2

 

 

 

标签:  Lua

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Lua中ipairs()和pairs()的区别与使用的详细内容...

  阅读:69次