Lua中ipair和pair的区别

 更新时间:2014年09月19日 12:09:54   投稿:junjie  
这篇文章主要介绍了Lua中ipair和pair的区别,ipair和pair都是用来遍历table用的,需要的朋友可以参考下

先看看官方手册的说明吧:

复制代码 代码如下:

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会遍历table的所有键值对。如果你看过耗子叔的Lua简明教程,你知道table就是键值对的数据结构。

而ipairs就是固定地从key值1开始,下次key累加1进行遍历,如果key对应的value不存在,就停止遍历。顺便说下,记忆也很简单,带i的就是根据integer key值从1开始遍历的。

请看个例子。

复制代码 代码如下:

tb = {"oh", [3] = "god", "my", [5] = "hello", [6] = "world"}

for k,v in ipairs(tb) do
     print(k, v)
end


输出结果就是:
复制代码 代码如下:

1       oh
2       my
3       god

因为tb不存在tb[4],所以遍历到此为止了。
复制代码 代码如下:

for k,v in pairs(tb) do
     print(k, v)
end

输出结果:
复制代码 代码如下:

1       oh
2       my
3       god
6       world
5       hello

我们都能猜到,将输出所有的内容。然而你发现输出的顺序跟你tb中的顺序不同。
如果我们要按顺序输出怎么办?办法之一是:
复制代码 代码如下:

for i = 1, #tb do
     if tb[i] then
          print(tb[i])
     else
end

当然,仅仅是个数组的话,ipairs也没问题。

以上(为什么不少回答会以「以上」收尾?,这里就是结束的意思吧)

相关文章

  • Lua教程(十九):C调用Lua

    Lua教程(十九):C调用Lua

    这篇文章主要介绍了Lua教程(十九):C调用Lua,本文讲解了C调用Lua基础知识、table操作、调用Lua函数等内容,需要的朋友可以参考下
    2015-04-04
  • 使用lua实现split字符串分隔

    使用lua实现split字符串分隔

    Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。
    2014-11-11
  • Lua 操作 MongoDB 数据库实例

    Lua 操作 MongoDB 数据库实例

    这篇文章主要介绍了Lua 操作 MongoDB 数据库实例,本文给出了修改后的lua-mongo API和具体的操作MongoDB 数据库代码,需要的朋友可以参考下
    2015-03-03
  • 详解Lua中的数组概念知识

    详解Lua中的数组概念知识

    这篇文章主要介绍了Lua中的数组概念知识,是Lua入门学习中的基础,需要的朋友可以参考下
    2015-05-05
  • Lua中的元表与元方法学习总结

    Lua中的元表与元方法学习总结

    这篇文章主要介绍了Lua中的元表与元方法学习总结,本文讲解了算术类的元方法、__tostring元方法等内容,需要的朋友可以参考下
    2014-09-09
  • Lua中实现php的strpos()以及strrpos()函数

    Lua中实现php的strpos()以及strrpos()函数

    这篇文章主要介绍了在Lua中实现php的strpos()以及strrpos()函数的方法,需要的朋友可以参考下
    2014-11-11
  • Lua中for循环语句的使用教程

    Lua中for循环语句的使用教程

    这篇文章主要介绍了Lua中for循环语句的使用教程,是Lua入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Lua cjson模块编译笔记及错误解决方法

    Lua cjson模块编译笔记及错误解决方法

    这篇文章主要介绍了Lua cjson模块编译笔记及错误解决方法,本文着重讲解报错的解决方法,修改了Makefile文件解决了错误问题,需要的朋友可以参考下
    2015-06-06
  • Lua学习笔记之数据结构

    Lua学习笔记之数据结构

    这篇文章主要介绍了Lua学习笔记之数据结构,本文讲解了数组、矩阵、链表、队列等内容,需要的朋友可以参考下
    2014-09-09
  • Lua在windows下的安装及环境配置

    Lua在windows下的安装及环境配置

    这篇文章主要介绍了Lua在windows下的安装及环境配置,本文使用lua for windows整体环境,lua for windows其实是一整套Lua的开发环境,需要的朋友可以参考下
    2015-07-07

最新评论