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 ...
随机推荐
- 手撕Vuex-添加全局$store
经过上一篇的介绍,了解到了 Vuex 的实现本质就是一个插件,所以要做的事情就是实现这个插件的代码编写即可. 本篇文章主要是实现一个全局的 $store,这个 $store 是挂载在 Vue 的原型上 ...
- 强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C、与生成对抗网络的联系等详解
强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-critic,A2C),异步A2C.与生成对抗网络的联系等详解 1.核心词汇 优势演员-评论员(a ...
- 19.11 Boost Asio 获取远程目录
远程目录列表的获取也是一种很常用的功能,通常在远程控制软件中都存在此类功能,实现此功能可以通过filesystem.hpp库中的directory_iterator迭代器来做,该迭代器用于遍历目录中的 ...
- 20.6 OpenSSL 套接字分发RSA公钥
通过上一节的学习读者应该能够更好的理解RSA加密算法在套接字传输中的使用技巧,但上述代码其实并不算完美的,因为我们的公钥和私钥都必须存储在本地文本中且公钥与私钥是固定的无法做到更好的保护效果,而一旦公 ...
- spark读取空orc文件时报错java.lang.RuntimeException: serious problem at OrcInputFormat.generateSplitsInfo
问题复现: G:\bigdata\spark-2.3.3-bin-hadoop2.7\bin>spark-shell 2020-12-26 10:20:48 WARN NativeCodeLoa ...
- 记一次在服务器上运行node.js程序时无法通过nohup xxx & 方式挂起的问题
由于业务需求 每天要在服务器上整理一组数据,为了方便就用node.js来写了.但是运行的时候发现了一个问题 明明使用了nohup main.js &的方式后台运行了程序 但是一旦我关闭了she ...
- Windows安装MySQL到最后卡主无响应处理办法
安装mysql-5.5.62-winx64到最后Ready to execute ... 生效配置时卡主无响应 最有效,最快的解决办法 就是:重启电脑 或者 关闭电脑,在开机,找到MySQL安装目录, ...
- iOS 17.4 测试版包含大模型相关代码
外界普遍预计苹果将在 6 月份通过 iOS 18 推出主要的新人工智能功能.不过根据 9to5Mac 的报道,他们在 iOS 17.4 第一个测试版中发现的代码表明,苹果正在开发由大语言模型技术支持的 ...
- Python内置小工具(非常实用!)
一.1秒钟启动一个下载服务器在工作中时不时会有这样的一个需求:将服务器(或者自己电脑)上的文件传给其他同事.将文件传给同事本身并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输.但是,如果需要传 ...
- 快速上手typescript(基础篇)
壹 ❀ 引 在javascript开发中,你可能也遇到过我这样的苦恼,在维护某段几年前的老旧代码时,我发现了某个数据加工方法fn,而且根据现有逻辑来看fn的某个参数是一个数组,因为新需求我需要对数组做 ...