加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

lua 中pairs 和 ipairs区别

发布时间:2020-12-14 22:11:56 所属栏目:大数据 来源:网络整理
导读:? 标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 ? (string.gmatch)等等。LUA手册中对与pairs,ipairs解释如下: ipairs (t) Returns three values: an iterator function,the
?

标准库提供了集中迭代器,包括迭代文件每行的(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,t[1]),(2,t[2]),···,up to the first integer key absent from the table.

?

?

?

?

pairs (t)

Returns three values: the?next?function,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

下面举个例子吧!
?
?eg:
local tabFiles = {
[3] = "test2",
[6] = "test3",
[4] = "test1"
}
?
for k,v in ipairs(tabFiles) do
print(k,v)
end
?
?
猜测它的输出结果是什么呢?
?
根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。
?
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
>Exit code: 0
?
那么,如果是
for k,v in pairs(tabFiles) do
print(k,v)
end
则会输出所有 :
>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
3 test2
6 test3
4 test1
>Exit code: 0
现在改变一下表内容,
local tabFiles = {
[1] = "test1",
[6] = "test2",
[4] = "test3"
}
for k,v)
end
现在的输出结果显而易见就是key=1时的value值test1
?>lua -e "io.stdout:setvbuf 'no'" "Test.lua"
1 test1
>Exit code: 0
--[示例1.]--
local tt =
{
??? [1] = "test3",
??? [4] = "test4",
??? [5] = "test5"
}

for i,v in pairs(tt) do??????? -- 输出 "test4" "test3" "test5"
??? print( tt[i] )
end

for i,v in ipairs(tt) do??? -- 输出 "test3" k=2时断开
??? print( tt[i] )
end



-- [[示例2.]] --
tbl = {"alpha","beta",[3] = "uno",["two"] = "dos"}

for i,v in ipairs(tbl) do??? --输出前三个
??? print( tbl[i] )
end

for i,v in pairs(tbl) do??? --全部输出 ??? print( tbl[i] ) end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读