Sollyu

  • 捐赠
  • 关于
  1. 首页
  2. 原创文章
  3. 正文

Lua中pairs和ipairs区别

2014年5月26日 5147点热度 0人点赞 0条评论

简介

标准库提供了集中迭代器,包括迭代文件每行的io.lines,迭代table元素的pairs,迭代数组元素的ipairs,迭代字符串中单词的string.gmatch等等。LUA手册中对与pairs,ipairs

解释如下:

ipairs (t)

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,t1), (2,t2), ···, up to the first integer key absent from the table.

pairs (t)

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以及pairs的不同。

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

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

pairs 为显示所有的,而 ipairs 则是如果碰到 nil 则退出。

例题说明

local tabFiles = {
                    [3] = "Hello",
                    [6] = "I'm",
                    [4] = "Sollyu"
                }

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

根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value=nil,所以直接跳出循环不输出任何值。

那么,如果是

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

则会输出所有

现在改变一下表内容

local tabFiles = {
                    [1] = "Hello",
                    [6] = "I'm",
                    [4] = "Sollyu"
                }

-- 这里是 ipairs
for k, v in ipairs(tabFiles) do
    print(k, v)
end

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

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: ipairs lua pairs
最后更新:2014年5月26日

sollyu

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2021 sollyu.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

苏ICP备15007531号