Lua pairs与ipairs效率分析

介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 

首先来看下 lua中table的结构定义:


table中分为2个存储空间, 一个是线性数组空间(TValue *array), 和一个hash空间(Node *node)

当我们使用 pairs 和 ipairs 会产生两种不同的迭代器, 一个仅仅遍历数组, 一个遍历所有的值

 

 

 




所以, 当调用ipairs的时候, 在线性数组中遇到第一个nil时便停止遍历, 不管后面还是否有值, 这点在遍历的时候要格外注意

而pairs的迭代器会调用lua_next, lua_next的实现:




这个函数会根据top信息调用luaH_next获取当前table中的下一组键值, 那么关键就在luaH_next中, 来看看这个函数的实现:



我们粗略的可以看到, 这个函数会先计算索引位置, 并根据该位置优先从线性数组中查找, 如果没有找到, 再从hash表中查找, 所以如果用pairs遍历array, 实则和ipairs等效, 并无差异.

所以, 由上面的分析, 如果我们明确table中的数据全部存放在线性数组中, 调用ipairs或者pairs均可, 并无太大差异(注意ipairs时中间不要出现nil值, 否则会导致遍历中断), 如果我们明确遍历hash表中的值, 则使用pairs, 其效率会较遍历array中的差


简单测试 遍历500 000 000个array or hash value的效率:

local array = {}
for i = 1, 500000000 dotable.insert(array, i)
endlocal startTime = os.time()
for i, v in pairs(array) doend
print(string.format("pairs time : %d", os.time() - startTime))startTime = os.time()
for i, v in ipairs(array) doend
print(string.format("ipairs time : %d", os.time() - startTime))

 

由于使用了os.time() , 只能获取到秒级时间, 故精确度不算太高...

 

转载自:https://blog.csdn.net/tony7758/article/details/6334001

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1381014.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(22):方阵函数在微分方程组中的应用

目录 前言往期文章5.6 方阵函数在微分方程组中的应用5.6.1 解一阶线性常系数齐次微分方程组5.6.2 解一阶线性常系数非齐次微分方程组 结语 前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出&#xf…

C++中pair使用详细说明

一、pair 的介绍 pair 是一个很实用的 "小玩意",当想要将两个元素绑在一起作为一个合成元素、又不想要因此定义结构体时,使用 pair 可以很方便地作为一个代替品。 也就是说,pair 实际上可以看作一个内部有两个元素的结构体&#xf…

Solidity实现默克尔树 Merkle Tree

​​Merkle Tree​​​,也叫默克尔树或哈希树,是区块链的底层加密技术,被BTC和Ethereum区块链广泛采用。​​Merkle Tree​​​是一种自下而上构建的加密树,每个叶子是对应数据的哈希,而每个非叶子为它的​​2​​个子…

论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入

笔记整理:黎洲波,浙江大学硕士,研究方向为自然语言处理、知识图谱。 研究背景 知识图谱因其在问答、语义解析和命名实体消歧等任务取得了良好的效果而受到广泛关注,而大部分知识图谱都存在不全和缺失实体链接的问题,所…

致敬乔布斯的经典,锤子坚果Pro成2017年最受欢迎手机看罗永浩怎么说

锤子坚果Pro发布已经近2个月,但热度依旧不减。在刚刚过去的京东618活动中,坚果Pro在1500到2000元档位产品中一举斩获单品销量冠军。坚果Pro凭借出色的销售战绩坐实2017手机圈“黑马”之名,而其销量节节攀升,这其中必有一番原因。日…

坚果Pro 2安抚了不少人锤粉, 但用户更期待锤子T3

今年秋季,锤子科技创始人罗永浩于2017年11月7日在成都发布坚果系列2代手机坚果Pro 2,指纹和logo的融合增强了手机的一体型。软件上的再度优化,帮助盲人更注重人文关怀,再从罗永浩自带“流量”,坚果Pro2自然而然受到大家…

pro坚果android耗流量,深度使用坚果Pro3一个月,憋了一肚子话,不吐不快​

原标题:深度使用坚果Pro3一个月,憋了一肚子话,不吐不快​ 罗永浩创办的锤子手机曾经在国内手机市场,也是一枚耀眼的新兴,罗永浩对于手机工业设计的高标准严要求让锤子手机成为了国内少有的在设计上能和苹果三星比肩的手…

厉害了!原来这些文艺明星都喜欢锤子坚果Pro

最近在手机圈出现了一匹黑马,那就是锤子坚果Pro。在京东618期间取得了十分骄人的战果,荣获6月1日至18日1500-1999元价位档单品销量第一,成为该价格区间最受欢迎的手机,同时在2017年4月1日后首发的新品销量排名中位列第三&#xff…

锤子t1android驱动,锤子T1痛失安卓5.1!都是因为这?

现如今很多高端手机都开始升级安卓6.0了,但是情怀锤子却突然给了老用户一“锤子”,宣布第一代T1将不会升级到安卓5.1,因为“优化效果不明显”。 这顿时引发了一片争议。有的T1用户表示了理解,称手机够用就好,不在乎系统…

内蒙古大学计算机考研资料汇总

内蒙古大学研招网 内蒙古大学计算机学院 内蒙古大学计算机学院成立于1997年,其前身是1978年设置的计算机专业和1988年成立的计算机科学系。内蒙古大学软件学院成立于2005年,与计算机学院为一个实体,两个牌子。目前学院由计算机科学系、…

如何获取bainu文档并用斡仑office进行编码转换-永中office蒙文版

声明: 1.bainu软件是由内蒙古卓嘎信息技术有限公司研发的。 2.斡仑office是由内蒙古斡仑科技有限公司与永中软件股份有限公司联合开发的蒙汉多文种跨平台办公套装。 第一,首先我们打开bainu软件,如图: 第二,下列图中…

为什么 Mixin 被认为是有害的

为什么 Mixin 被认为是有害的 Mixin 是在 Vue 2 中引入的,作为组件之间共享代码的解决方案,这种方式成为许多代码库不可或缺的一部分。然而,随着时间的推移,它们的使用开始出现问题。尽管 mixins 最初很有吸引力,但现…

【从零开始学习JAVA | 第四十五篇】反射

目录 前言: ​反射: 使用反射的步骤: 1.获取阶段: 2.使用阶段: 反射的应用场景: 使用反射的优缺点: 总结: 前言: Java中的反射是一项强大而灵活的功能&#xff0…

1688采源宝的商家靠谱吗 怎么入驻成为阿里采源宝商家

说到采源宝,我想很多微商都是不陌生的,采源宝的主要作用就是方便微商查看并转发供应商所发布的商品,并在有客户下单时,还可以轻松向供货商去下单。但也有很多朋友对采源宝的商家靠谱吗这个问题存在很大疑惑,下面我们就…

开发nft数字藏品平台合法合规吗?

开发nft数字产品平台合法合规吗?这是很多人都在问的问题,那么今天就来给大家说说。 开发nft数字产品平台可以肯定的是合法合规。 其实很多人对国内国外的玩法不太了解,有很多人对数字产品法律和政策不太清楚。首先,我们要了解国内…

最近发现一款拍卖转拍,玩家互动挑选自己想要的拍品,转拍获利,还可以提货的源码,一款购物和赚钱的不二选择

拍卖转拍,玩家互动挑选自己想要的拍品,转拍获利,还可以提货,一款购物和赚钱的不二选择操作步骤打开拍卖首页 根据时间点击进入指定的场次选作品, 等待到时间准备抢拍, 抢完之后可以查看卖家的收款码, 确认打款之后可以上传支付截图 然后可以等待卖家确认收货, …

1688按图搜索商品(拍立淘)获取数据的教程

onebound.1688.item_search_img 获取key和secret API文档说明 完整返回数据 "items": { "real_total_results": 80, "error": "", "item": [ { "title"…

基于java SSM框架的竞拍系统拍卖网设计

今天给大家介绍一个竞拍网的设计与实现。 本项目主要实现的功能是为广大的消费者群体与商家之间提供网络交易的平台,实现该平台的创建需要实现一系列的功能。 商品信息发布的功能,商家发布自己产品的相关信息;注册登录功能,游客通…

Java基于ssm开发的古董竞标拍卖系统也可以改成拍卖品网站

简介 古董展品拍卖网站 用户可以注册成为买家也可以申请开店成为卖家,发布古董展品,设置拍卖起止时间进行展品的拍卖。如果早于拍卖开始时间或者晚于拍卖结束时间,则不可以竞拍。多人竞拍,买家可以根据最高价设置谁中标&#xff…

星球日报|Conflux支持 阿里上线国内最大数字藏品交易撮合平台

转载自Odaily星球日报 近日,阿里拍卖在淘宝 APP 首屏重要入口位置上线了一大批第三方公链以及平台支持的数字藏品店铺,以供用户进行拍卖交易。除由公链 Conflux 支持的数字藏品外,阿里拍卖同时存在由国产联盟链“知信链”和“新版链”技术支持…