• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua 中 pairs 和 ipairs 的区别

Lua 中 pairs 和 ipairs 的区别

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了Lua中的闭包小结等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

官方文档上的说明:

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, 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

下面举个例子

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

猜测它的输出结果是什么呢?根据刚才的分析,它在 ipairs(tabFiles) 遍历中,当key=1时候value就是nil,所以直接跳出循环不输出任何值。

>lua -e "io.stdout:setvbuf 'no'" "test.lua" 
>Exit code: 0 
</div>

那么,如果是

for k, v in pairs(tabFiles) do 
    print(k, v)  
end 
</div>

则会输出所有:

>lua -e "io.stdout:setvbuf 'no'" "test.lua"   
3 test2  
6 test3  
4 test1  
>Exit code: 0 
</div>

现在改变一下表内容:

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

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

>lua -e "io.stdout:setvbuf 'no'" "test.lua"   
1 test1  
>Exit code: 0 
</div>

-- [[示例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 
</div>

</div>

您可能想查找下面的文章:

相关文章

  • Lua中写排序算法实例(选择排序算法)
  • Lua读写文件代码示例
  • Linux下编写Lua扩展so文件和调用方法实例
  • Lua中基本的数据类型、表达式与流程控制语句讲解
  • Lua table的concat方法使用实例
  • LUA string库使用小结
  • Lua简介、编译安装教程及变量等语法介绍
  • Lua中函数的几个特别之处探究
  • Lua调用自定义C模块
  • Lua文件读写详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 详解Lua中的if语句的使用方法
    • Lua模块和模块载入浅析
    • Lua获取网络时间(获取时间同步服务器的时间)
    • lua开发中实现MVC框架的简单应用
    • Lua中的类编程代码实例
    • 在Mac OS中安装Lua的教程
    • Lua的协程(coroutine)简介
    • Lua编程示例(六): C语言调用Lua函数
    • Lua教程(五):C/C++操作Lua数组和字符串示例
    • Lua脚本语言简明入门教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有