文章目录

  • 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相关推荐

  1. Lua ipairs与pairs的区别

    Lua ipairs与pairs的区别 相同点和不同点 相同点 不同点: 举例说明 测试代码 测试结果分析 相同点和不同点 相同点 ipairs和pairs一般都用来对table进行遍历 不同点: i ...

  2. Lua ipairs、pairs

      先给出 lua 官方 reference 中 ipairs 和 pairs 的解释: pairs (t) Returns three values: the next function, the ...

  3. 小羊驼和你一起学习cocos2d-x与lua之一(迭代器pairs 和 ipairs区别)

    标准库提供了集中迭代器,包括迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的 (string.gmatch)等等 pairs可 ...

  4. Lua中的pairs们(pairs,ipairs,gmatch)

    我们都知道 pairs在英语中有一对,一双的意思.在Lua中,仍然是这个意思,不过这儿的对是键值对,也就是key-value. 在Lua的文档中查询pairs,我们可以看到的有三个结果 pairs,i ...

  5. Lua语言中pairs和ipairs的区别

    tbl = {"alpha", "beta", ["one"] = "uno", ["two"] = ...

  6. Lua 闭包实现pairs和ipairs

    1.闭包实现pairs local testTbl = {id = 88, count = 777, 11, 33, head = 1} for k, v in pairs(testTbl) do   ...

  7. Lua pairs与ipairs效率分析

    介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 首先来看下 lua中table的结构定义: table中分为2个 ...

  8. lua中pairs和ipairs的区别

    在lua中,pairs可以遍历表中所有的key,并且除了迭代器本身以及遍历表本身还可以返回nil; 但是ipairs则不能返回nil,只能返回数字0,如果遇到nil则退出.它只能遍历到表中出现的第一个 ...

  9. Lua的for in和pairs

    Lua中的for in迭代语法格式如下: for k,v in pairs(t) doprint(k,v) end 查看以下实例: array = {"Lua", "Tu ...

最新文章

  1. Centos7 搭建 k8s 环境教程,一次性成功
  2. PlayFramework入门教程
  3. 12.C++:strtol() 字符串转长整型函数
  4. matlab错误原因,matlab常见错误分析
  5. python字典嵌套字典的情况下获取某个key的value
  6. MAC OS X 10.9.X下用命令行开启SSD trim的方法汇总
  7. linux的基础知识——raise函数,abort函数和定时函数
  8. 基于python的知识融合_知识融合
  9. 网站设置404错误页
  10. 【语义分割】Pyramid Scene Parsing Network(PSNET)
  11. 基于javaweb+jsp的小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)
  12. linux下c使用lzma_lzma文件及命令简介
  13. java 数据结构和算法 排序
  14. 泾阳县副县长崔巍领导一行莅临秦储指导交流
  15. 计算机入门 零基础,电脑新手入门指南——零基础一分钟入门电脑硬件
  16. MacBook连接蓝牙鼠标、蓝牙键盘失败的解决方案
  17. 关于使用硬盘对拷机后两硬盘UUID一样无法挂载问题
  18. python音频加速_python将音频进行变速的操作方法
  19. PAT 1056 Mice and Rice
  20. 笔试题——用java实现股票交易日的判断

热门文章

  1. crh寄存器_牛人的STM32学习笔记(寄存器版本).doc
  2. 文献导读 - Machine Learning Identifies Stemness Features Associated with Oncogenic Dedifferentiation...
  3. 机器学习实战:用网络摄像头预测年龄和性别
  4. OSSIM开源安全信息管理系统(十七)
  5. linux 显卡驱动 960,【Ubuntu】Ubuntu16.04安装GTX960M显卡驱动
  6. 万字整理,肝翻Linux内存管理所有知识点
  7. STK仿真日记之双星相位轨控
  8. android百度地图 自定义气泡,百度地图自定义吹出框(气泡)(转)
  9. CSDN取消手机绑定
  10. java实现百度人脸识别API(SpringBoot集成)