文档章节

lua ipairs(t) and pairs(t)

andrew810810
 andrew810810
发布于 2017/02/14 16:44
字数 536
阅读 3
收藏 0
Lua

ipairs(t) and pairs(t)

reference:

http://www.lua.org/manual/5.3/manual.html

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 key–value pairs (1,t[1]), (2,t[2]), ..., up to the first nil value.

 

 

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.

 

示例1:

local tabFiles = {   
[2] = "test2",  
[4] = "test3",  
[3] = "test1"  
}  
   
for k, v in ipairs(tabFiles) do  
print(k, v)  
end

运行结果:

当 Lua 调用 ipairs(a)开始循环时,他获取三个值:迭代函数 iter,状态常量 a 和控制变量初现的原始方法:始值 0;然后 Lua 调用 iter(a,0)返回 1,a[1](除非 a[1]=nil);第二次迭代调用 iter(a,1)返回 2,a[2]……直到第一个非 nil 元素。

所以在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

示例2:

local tabFiles = {
[2] = "test2",
[4] = "test3",
[3] = "test1"
}

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

运行结果:

3	test1
2	test2
4	test3

疑问:

示例2输出顺序为什么是这样的?

示例3:

local tabFiles1 = {   
[3] = "test2",  
[6] = "test3",  
[4] = "test1"  
}  
   

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

运行结果:

3	test2
6	test3
4	test1

 

示例4:

local tabFiles2 = {   
[1] = "test2",  
[6] = "test3",  
[4] = "test1"  
}
for k, v in ipairs(tabFiles2) do  
print(k, v)  
end

运行结果:

1	test2

当key=2时候value就是nil,所以直接跳出循环不输出任何值。

示例5:

local tabFiles2 = {   
[1] = "test2",  
[6] = "test3",  
[4] = "test1"  
}
for k, v in pairs(tabFiles2) do  
print(k, v)  
end

运行结果:

1	test2
6	test3
4	test1

 

示例6:

local tabFiles3 = {   
[2] = "test2",  
[6] = "test3",  
[1] = "test1",
"ok",
}  
for k, v in ipairs(tabFiles3) do
print(k, v)
end

运行结果:

1	ok
2	test2

 

示例7:

local tabFiles3 = {   
[2] = "test2",  
[6] = "test3",  
[1] = "test1",
"ok",
}  
for k, v in pairs(tabFiles3) do
print(k, v)
end
1	ok
2	test2
6	test3

注释:

table中定义了key为1的value,以及没有定义key的value,发现对于key为1的value会被没有定义key的value覆盖。

© 著作权归作者所有

共有 人打赏支持
andrew810810
粉丝 3
博文 141
码字总数 117648
作品 0
朝阳
Lua 笔记--迭代器与泛型for

所谓“迭代器”就是一种可以遍历一种集合中所有元素的机制。在Lua中,通常将迭代器表示为函数。每调用一次函数,即返回集合中的“下一个”元素。 function values(t) local i = 0 return fu...

_子墨
2014/12/27
0
0
Lua 语言的陷阱

Lua 语言核心很小,用纯 C 构建,方便嵌入许多系统,而且语法简洁,文档齐备,还有速度更快的 LuaJIT 的解释器。所以决定用这种语言实现 Spp 的算法。 Lua 的标准库很小,JSON, 和 Seriaria...

沙枣
2015/10/18
138
0
Lua 5.2/5.3 热更新小结

Lua热更新实现 用途 在生产环境上,总有可能出现不可预知的Bug,而通常修改好Bug仅仅又修改几句,停机维护的成本又太高,对于游戏来说,通常每个服就是单独的进程,也做不到像分布式环境下,...

tickbh
2016/04/26
559
3
Lua Starter

标签: Lua Lua starter Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua 是巴西里约热...

维特的烦恼
2016/07/21
486
0
Lua中,泛型for循环遍历table时,ipairs和pairs的区别

为了看出两者的区别,首先定义一个table: 使用ipairs对其进行遍历: 输出的结果是: Hello World Good Bye 可见ipairs并不会输出table中存储的键值对,会跳过键值对,然后按顺序输出table中的...

哲别0
06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

.NET 知识整理笔记

1.Web.Config配置文件的节点操作 在Web.Config中写入 <configuration> <connectionStrings> <add name="conStr" connectionString="Data Source=IUCL8V4Y7NW5IRA\SQLEXPRESS;Initia......

Jokeny
30分钟前
1
0
Spring 声明式注解事务实现机制

Spring中注解事务实现机制 在使用@Transactional 注解管理事务时步骤很简单。但是如果对@Transactional理解不够透彻,很容易出现事务不起作用的情况。所以,在对@Transactional的实现机制要有...

狂奔的熊二
31分钟前
0
0
Fastjson - 详解SerializeFilter,格式化对象字段

遇到一个奇葩场景,维护一个老的程序, 应用换了个服务方. 要切接口. 但有以下问题. 接口逻辑稍有不同 , 需要自己按原接口文档,重组逻辑. 接口字段名,字段类型改动较大. 但还要按原接口文档返回...

ol_O_O_lo
31分钟前
1
0
一个小知识点---关于传递引用参数

如果传入引用参数 在方法内new 对象,其改变外层不可见 如下方式保持引用的有效性

职业搬砖20年
36分钟前
0
0
Oracle数据导入导出命令及参数介绍(Linux)

1.数据导出 exp system/123456 file=d:\backup\oracle\oracle%date:~0,10%.dmp owner=system log=d:\backup\oracle\oracle%date:~0,10%.log 2.数据导入 imp system/manager@TEST file=d:\d......

lyle_luo
37分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部