Lua中pair和ipair的区别
Lua中pair和ipair的区别?
二者都是Lua中内置的迭代器,可以对数组或table进行遍历。
在正常的数组或table的遍历中,二者没有区别。
tableNormal={"this","is","a","array"}
--使用 pairs 遍历
for key,val in pairs(tableNormal) do
print(key,'==',val)
end
遍历结果:
--使用 ipairs遍历
for key,val in ipairs(tableNormal) do
print(key,'==',val)
end
遍历结果:
二者没有任何差别!
之所以说是正常的数组,是因为索引是连续的,数值都是存在的,不存在nil的情况。
而如果索引不连续,或索引类型不是num,那么二者就显现出差别。再看,
- 索引类型为num,但不连续
table1={}
table1[1]="Hello"
table1[2]="Tony!"
table1[3]="This"
table1[6]="is"
--使用ipairs 遍历
for key,val in ipairs(table1) do
print(key,'==',val)
end
结果:
--使用pairs遍历
for key,val in pairs(table1) do
print(key,'==',val)
end
结果:
显然,使用pairs能对数组内容整体遍历。而ipairs只会访问连续的数字索引内容。
查看一下table长度(实际长度为4):
print("table1的长度",#table1)
好,我们再看一个情况:
table2={[2]="welcome",[3]="to",[4]="my",[5]="blog"}
print("----------------ipairs-------------------------")
for key,val in ipairs(table2) do
print(key,"==",val)
end
猜猜会打印什么?
什么也没有打印!可见ipairs只能从索引为1的位置遍历,且只能访问连续的索引区间。
当然,pairs可以直接遍历咯!
for key,val in pairs(table2) do
print(key,"==",val)
end
--查看数组长度
print("table2长度====",#table2)
可见长度的获取和ipairs有关。
我们可以自定义获取数组长度的函数
function tableSize(table)
local size=0
for k,v in pairs(table) do
size=size+1
end
return size
end
print("table2长度====",tableSize(table2))
对于索引类型为非nums的table来说,若想遍历直接使用pairs即可。
tableAbnormal={[1]="TonyCode",index1="index1",i2="index2",s3="s3"}
print("=============ipairs的执行结果=============")
for i, v in ipairs(tableAbnormal) do
print(i, '=', v)
end
print("=============pairs的执行结果=============")
for i, v in pairs(tableAbnormal) do
print(i, '=', v)
end
综上可知,ipairs适用于数值索引且连续的数组或table的遍历,而pairs对于不同元素类型的数组都适用。但是能使用ipairs尽可能使用,其性能更好。
Lua中pair和ipair的区别的更多相关文章
- 范性for语义以及pair和ipair的区别
详情参考 lua手册 1. 范性for语义 在了解pair和ipair前先简单了解下lua中的for循环,这里只阐述范性for循环的语义,范性 for 在自己内部保存迭代函数,实际上它保存三个值:迭代 ...
- Lua中 pairs和ipairs的区别
Lua系列–pairs和ipairsLua中Table的存储方式在看二者的区别之前,我们首先来看一下Lua中的table是如何在内存中进行分配的.Table的组成:1.哈希表 用来存储Key-Valu ...
- Lua table pair和ipair区别
官方描述: ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the constru ...
- lua中pairs和ipairs的区别
标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (string.gmatch)等等.LUA手册中 ...
- Lua中ipairs和pairs的区别详解
迭代器for遍历table时,ipairs和pairs的区别: 区别一:ipairs遇到nil会停止,pairs会输出nil值然后继续下去 区别二: , b = , x = , y = , " ...
- Lua 中 pairs 和 ipairs 的区别
ipairs (t) Returns three values: an iterator function, the table t, and 0, so that the construction ...
- lua中pairs 和 ipairs 的区别
1.table中存储值的时候,是按照顺序存储的,存储 k-v 的时候,是按照 k 的哈希值存储的. 2.ipairs --- 只能输出 table 中的值,并且不可输出nil,遇到 ni l就退出 p ...
- lua 中pairs 和 ipairs区别
lua 中pairs 和 ipairs区别 标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (s ...
- Lua中“.”调用方法与“:”调用方法的区别
Lua中“.”调用方法与“:”调用方法的区别: ...
- lua 中 . 和 : 的区别
lua 中 . 和 : 的区别 首先在lua中使用":"定义的函数会自动传入一个名为self的变量,这个变量是隐含的,self同c++中的this一样,表示当前对象的指针:而&qu ...
随机推荐
- 将input 中的小写字母转化为大写字母
小写转换为大写,使用toLocaleUpperCase() options.element.find(".CarNumber").textbox({ label: '车牌号:', ...
- 从零开始配置vim(23)——lsp基础配置
上一章,我们初步认识了lsp,并且对 nvim-treesitter插件进行了配置,为编辑器提供了代码着色.自动格式化以及增量选中功能.算是初步体验了 lsp的相关功能.从这篇开始我们通过lsp的功能 ...
- TienChin 活动管理-修改活动
后端 ChannelController.java @PreAuthorize("hasPermission('tienchin:channel:edit')") @GetMapp ...
- Milvus 2.3.功能全面升级,核心组件再升级,超低延迟、高准确度、MMap一触开启数据处理量翻倍、支持GPU使用!
Milvus 2.3.功能全面升级,核心组件再升级,超低延迟.高准确度.MMap一触开启数据处理量翻倍.支持GPU使用! 1.Milvus 2.3版本全部升级简介 Milvus 2.3.0 不仅包含大 ...
- 三线表制作(word)
三线表制作 转载:https://blog.csdn.net/zaishuiyifangxym/article/details/81668886
- 6、后端学习规划:Java学习 - 学习规划系列文章
Java语言在现在的编程语言排行榜上也是前5的存在.经过这么些年的发展,Java的发展没有C#这么大,但是在编程领域,因为有MVC架构,以及Spring框架的支持,以及微服务架构等等,Java这些年也 ...
- 【双指针】双指针算法详解两道经典OJ【力扣27,力扣26,力扣38】超详细算法教程
[双指针]双指针算法详解两道经典OJ[力扣27,力扣26,力扣38]超详细算法教程 今天又又到了我们刷力扣题的时间啦! 今天博主给大家带来的三道题是: 27. 移除元素 26. 删除有序数组中的重复项 ...
- 小知识:杜绝明文密码,OGG的credentialstore特性
之前OGG配置文件中都会明文记录密码,而在OGG12c及以上版本中,有一个特性credentialstore,可以用来杜绝明文密码,提升安全性. 这里测试添加credentialstore并配置数据库 ...
- 反悔贪心&模拟费用流
贪心是一种常用的算法,它能够获得局部最优解,但我们往往需要的是全局最优解,所以我们在贪心的时候加入和反悔的机制,让他能够得到全局最优解. 由于网络流中的退流操作本质上也是反悔贪心,所以在实现反悔贪心时 ...
- Linux学习资料锦集
Linux 学习资料链接: (1)Linux常见命令及其用法_STM32李逼的博客-CSDN博客 (2)Linux命令了解_STM32李逼的博客-CSDN博客 3)Linux使用编辑器_STM32李 ...