文档章节

lua ipairs(t) and pairs(t)

andrew810810
 andrew810810
发布于 2017/02/14 16:44
字数 536
阅读 5
收藏 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覆盖。

© 著作权归作者所有

共有 人打赏支持
上一篇: lua中虚变量
下一篇: lua字符序列
andrew810810
粉丝 3
博文 141
码字总数 117648
作品 0
朝阳
私信 提问
Lua系列--pairs和ipairs

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwlcsdn000/article/details/81291756 Lua系列–pairs和ipairs Lua中Table的存储方式 在看二者的区别之前,我...

那远远的云端
2018/07/30
0
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

没有更多内容

加载失败,请刷新页面

加载更多

【转】初次提交项目到github

第一步:安装Git 第二步:在自己的工程目录下右键鼠标 选择 Git Bash Here 执行命令 git init 来创建一个本地代码仓库 执行命令 git add . 来把所有文件添加到仓库 执行命令 git commit -m ...

覃光林
14分钟前
2
0
Zend Studio使用教程:使用PHPUnit检测代码(五)

本教程演示如何在代码上创建和运行PHPUnit Test。您将学习如何创建和运行包含许多测试用例的单个单元测试用例和测试套件。 单元测试是一个测试代码的过程,以确保源代码的各个单元正常工作,...

电池盒
14分钟前
2
0
前端 联想搜索下拉框

data.result 为联想搜索出来的数组 innerhtml += "<ul style='list-style:none;font-size:13px;margin: 0px;padding: 5px;'>";for (var j = 0; j < data.result.length; j++) { var r......

yan_liu
15分钟前
2
0
预计2019年发布的Vue3.0到底有什么不一样的地方?

摘要: Vue 3.0预览。 原文:预计今年发布的Vue3.0到底有什么不一样的地方? 作者:小肆 Fundebug经授权转载,版权归原作者所有。 还有几个月距离 vue2 的首次发布就满 3 年了,而 vue 的作者...

Fundebug
15分钟前
1
0
跟我学Spring Cloud(Finchley版)-11-Feign常见问题总结

本文总结Feign常见问题及解决方案。 一、FeignClient接口如使用@PathVariable ,必须指定value属性 代码示例: @FeignClient("microservice-provider-user")public interface UserFeignCli......

周立_ITMuch
16分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部