lua 自实现pairs
文章目录
- 1.实现一个简单的pairs
- 2.实现对象的pairs
1.实现一个简单的pairs
local tbl = {}
function GenerateData()--构造一个哈希 tablefor i = 1,10 dolocal value = math_random(1,100000)tbl[value] = valueend
end--自己实现的pairs
function selfPairs(tbl,key)-- assert(tbl == "table")--迭代器函数local function iterator(tbl,key)return next(tbl,key)end--这里的tbl 会作为 迭代器的第一个参数, nil会作为迭代器的第二个参数 以此类推return iterator,tbl,nil
endGenerateData()
for k,v in selfPairs(tbl) doprintx(k,v)
end--自己实现的pairs 返回一个数组table
function selfPairs2(tbl,key)assert(type(tbl) == "table")local newTbl = {}for _,v in pairs(tbl) dotable.insert(newTbl,v)endtable.sort(newTbl,function(a,b)return a > bend)--迭代器函数local function iterator(tbl,key)return next(tbl,key)end--这里的newTbl 会作为 迭代器的第一个参数, nil会作为迭代器的第二个参数 以此类推return iterator,newTbl,nil
endGenerateData()for k,v in selfPairs2(tbl) doprintx(k,v)
end
2.实现对象的pairs
--自己的双向链表类
clsSelfDLinkObj = STRUCT.clsDLink:Inherit("clsSelfDLinkObj")--复写pairs
function clsSelfDLinkObj:pairs()local function iterator(self,node)--把条件运算符当成三元运算符使用,可能造成死循环--注意:下面这么写肯定会死循环 因为当遍历到链表的尾节点时, Next为nil, 此时 node 又等于 self.m_Header 陷入死循环--[[node = node and node.Next or self.m_Headerif node and node.Data thenreturn node, node.Dataend]]--修正 只要没有环存在,就不会陷入死循环if not node thennode = self.m_Headerelsenode = node.Nextendreturn node,node and node.Dataend--这里的self 会作为 迭代器的第一个参数, nil会作为迭代器的第二个参数 以此类推return iterator,self,nil
endlocal TEST_COUNT = 5
function TestDLink()local SelfDLinkObj = clsSelfDLinkObj:New()clsSelfDLinkObj:OnCreate("EXREA_TEST")for i= 1,TEST_COUNT doSelfDLinkObj:Push(i)endfor Node,Data in SelfDLinkObj:pairs() doprintx(Node,Data)end
end
TestDLink()
lua 自实现pairs相关推荐
- Lua ipairs与pairs的区别
Lua ipairs与pairs的区别 相同点和不同点 相同点 不同点: 举例说明 测试代码 测试结果分析 相同点和不同点 相同点 ipairs和pairs一般都用来对table进行遍历 不同点: i ...
- Lua ipairs、pairs
先给出 lua 官方 reference 中 ipairs 和 pairs 的解释: pairs (t) Returns three values: the next function, the ...
- 小羊驼和你一起学习cocos2d-x与lua之一(迭代器pairs 和 ipairs区别)
标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (string.gmatch)等等 pairs可 ...
- Lua中的pairs们(pairs,ipairs,gmatch)
我们都知道 pairs在英语中有一对,一双的意思.在Lua中,仍然是这个意思,不过这儿的对是键值对,也就是key-value. 在Lua的文档中查询pairs,我们可以看到的有三个结果 pairs,i ...
- Lua语言中pairs和ipairs的区别
tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...
- Lua 闭包实现pairs和ipairs
1.闭包实现pairs local testTbl = {id = 88, count = 777, 11, 33, head = 1} for k, v in pairs(testTbl) do ...
- Lua pairs与ipairs效率分析
介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 首先来看下 lua中table的结构定义: table中分为2个 ...
- lua中pairs和ipairs的区别
在lua中,pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil; 但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出.它只能遍历到表中出现的第一个 ...
- Lua的for in和pairs
Lua中的for in迭代语法格式如下: for k,v in pairs(t) doprint(k,v) end 查看以下实例: array = {"Lua", "Tu ...
最新文章
- Centos7 搭建 k8s 环境教程,一次性成功
- PlayFramework入门教程
- 12.C++:strtol() 字符串转长整型函数
- matlab错误原因,matlab常见错误分析
- python字典嵌套字典的情况下获取某个key的value
- MAC OS X 10.9.X下用命令行开启SSD trim的方法汇总
- linux的基础知识——raise函数,abort函数和定时函数
- 基于python的知识融合_知识融合
- 网站设置404错误页
- 【语义分割】Pyramid Scene Parsing Network(PSNET)
- 基于javaweb+jsp的小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)
- linux下c使用lzma_lzma文件及命令简介
- java 数据结构和算法 排序
- 泾阳县副县长崔巍领导一行莅临秦储指导交流
- 计算机入门 零基础,电脑新手入门指南——零基础一分钟入门电脑硬件
- MacBook连接蓝牙鼠标、蓝牙键盘失败的解决方案
- 关于使用硬盘对拷机后两硬盘UUID一样无法挂载问题
- python音频加速_python将音频进行变速的操作方法
- PAT 1056 Mice and Rice
- 笔试题——用java实现股票交易日的判断
热门文章
- crh寄存器_牛人的STM32学习笔记(寄存器版本).doc
- 文献导读 - Machine Learning Identifies Stemness Features Associated with Oncogenic Dedifferentiation...
- 机器学习实战:用网络摄像头预测年龄和性别
- OSSIM开源安全信息管理系统(十七)
- linux 显卡驱动 960,【Ubuntu】Ubuntu16.04安装GTX960M显卡驱动
- 万字整理,肝翻Linux内存管理所有知识点
- STK仿真日记之双星相位轨控
- android百度地图 自定义气泡,百度地图自定义吹出框(气泡)(转)
- CSDN取消手机绑定
- java实现百度人脸识别API(SpringBoot集成)