脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Lua - Lua中ipair和pair的区别

Lua中ipair和pair的区别

2020-04-10 14:45junjie Lua

这篇文章主要介绍了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也没问题。

 

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

延伸 · 阅读

精彩推荐
  • LuaLua教程(二):基础知识、类型与值介绍

    Lua教程(二):基础知识、类型与值介绍

    这篇文章主要介绍了Lua教程(二):基础知识、类型与值介绍,本文讲解了Hello World程序、代码规范、全局变量、类型与值等内容,需要的朋友可以参考下 ...

    脚本之家5922020-04-28
  • Lua深入探究Lua中的解析表达式

    深入探究Lua中的解析表达式

    这篇文章主要介绍了深入探究Lua中的解析表达式,对于其语法部分的说明和示例都超详细,极力推荐此文!需要的朋友可以参考下 ...

    脚本之家3542020-05-05
  • LuaLua中计算、执行字符串中Lua代码的方法

    Lua中计算、执行字符串中Lua代码的方法

    这篇文章主要介绍了Lua中计算、执行字符串中Lua代码的方法,类似JavaScript中eval函数的功能,在Lua中也可以实现,需要的朋友可以参考下 ...

    脚本之家6322020-04-30
  • LuaLua中的元方法__newindex详解

    Lua中的元方法__newindex详解

    这篇文章主要介绍了Lua中的元方法__newindex详解,本文讲解了查询与更新、监控赋值、通过table给另一个table赋值等内容,需要的朋友可以参考下 ...

    笨木头8872020-04-09
  • LuaLua简介、编译安装教程及变量等语法介绍

    Lua简介、编译安装教程及变量等语法介绍

    这篇文章主要介绍了Lua简介、编译安装教程及变量等语法介绍,本文同时讲解了lua注释语法、Lua命令行方式等内容,需要的朋友可以参考下 ...

    junjie3632020-04-14
  • LuaLua中table库函数方法介绍

    Lua中table库函数方法介绍

    这篇文章主要介绍了Lua中table库函数方法介绍,本文讲解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以参考下 ...

    脚本之家2502020-04-17
  • LuaLua和C语言的交互详解

    Lua和C语言的交互详解

    这篇文章主要介绍了Lua和C语言的交互详解,Lua和C语言通过栈完成交互,本文结合代码实例详细讲解了交互的方法,需要的朋友可以参考下 ...

    果冻想3702020-04-14
  • LuaLua实现__add方法重载示例

    Lua实现__add方法重载示例

    这篇文章主要介绍了Lua实现__add方法重载示例,本文直接给出实现代码,需要的朋友可以参考下 ...

    脚本之家7452020-04-24