文档章节

lua ipairs(t) and pairs(t)

andrew810810
 andrew810810
发布于 2017/02/14 16:44
字数 536
阅读 3
收藏 0
点赞 0
评论 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
博文 127
码字总数 117648
作品 0
朝阳
Lua 笔记--迭代器与泛型for

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

_子墨 ⋅ 2014/12/27 ⋅ 0

Lua 语言的陷阱

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

沙枣 ⋅ 2015/10/18 ⋅ 0

Lua 5.2/5.3 热更新小结

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

tickbh ⋅ 2016/04/26 ⋅ 3

Lua Starter

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

维特的烦恼 ⋅ 2016/07/21 ⋅ 0

Lua中,泛型for循环遍历table时,ipairs和pairs的区别

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

哲别0 ⋅ 06/06 ⋅ 0

xmake插件开发之类库使用

xmake通过import接口,可以在自定义脚本中导入各种内置类库和扩展类库模块,使得xmake的插件开发具有更多的灵活性,提供更丰富的功能。 我们先看下,目前xmake提供的一些类库: 在根目录下的...

ruki ⋅ 2016/06/21 ⋅ 0

使用 Redis 解决“树”形数据的复杂查询

原文出处:qiujiayu 最近因业务需要,研究了一下树数据结果的存储及查询解决方案。 最初的想法是使用neo4j,可是在网上看了一下开源的不支持集群,感觉用的人不多。 网上也查了一些 树形结构数...

qiujiayu ⋅ 2017/09/04 ⋅ 0

Lua程序设计 控制结构

Lua提供了一组传统、小巧的控制结构:if、while、repeat和for。所有的控制结构都有一个显示的终止符:if、for和while以end作为结尾,repeat以until做为结尾。控制结构中的条件表达式可以是任...

80后小子 ⋅ 2014/07/14 ⋅ 1

Lua 5.2 (beta) 发布

Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 新版本的主要变化: 语言: 1.线程和功能上不再增加fenv 2.表单...

小编辑 ⋅ 2011/06/20 ⋅ 2

lua实现多继承

lua对于面向对象的支持主要通过table来实现,每个table都是一个对象,对于继承,lua有元表的机制,通过setmetatble()可以来修改元表, 元表是什么? 元表其实就是在本身找不到的东西,就会去元...

lxfeng ⋅ 2015/04/14 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部