游戏人生
首页
(current)
GameDevTools
登陆
|
注册
个人中心
注销
Lua 教程
Lua 教程
Lua 编辑器安装
Lua 变量
Lua 数据类型
Lua 循环
Lua 流程控制
Lua 函数
Lua 运算符
Lua 字符串
Lua 数组
Lua 迭代器
Lua table(表)
Lua 模块(module)
Lua 文法 BNF范式
Lua 实例
<< Lua 数组
Lua table(表) >>
Lua 迭代器
lua迭代器是一种用来遍历集合的对象. ------------ ####lua 自带迭代器 for...pairs 循环内部保存了迭代器对象,例如下面的代码: ```lua local tmpHeroNameArray={"HeroA","HeroB","HeroC"} for key,value in pairs(tmpHeroNameArray) do print(key,value) end print(pairs) ``` 输出结果: 1 HeroA 2 HeroB 3 HeroC function: 68d16fa0 上面代码,获取 pairs 的类型,pairs 其实是一个函数。 for进行多次循环,然后pairs 返回 key,value 这两个数据。 ------------ #### lua自定义迭代器 下面我们自定义迭代函数 MyPairs(),替代pairs(): ```lua ---自定义迭代函数实例 local tmpHeroNameArray={"HeroA","HeroB","HeroC"} ---自定义迭代函数,对应pairs() function MyPairs(varArray) local tmpIndex=0 local tmpTotalCount=#varArray ---返回迭代器对象 return function() tmpIndex=tmpIndex+1 if tmpIndex<=tmpTotalCount then return varArray[tmpIndex] end end end for tmpHeroName in MyPairs(tmpHeroNameArray) do print(tmpHeroName) end ``` 输出结果: HeroA HeroB HeroC --- ####lua无状态迭代 上面我们实现的迭代器是有状态的,意思就是要自己存储当前迭代到了哪一个数据,tmpIndex 就是这个状态数据。 lua也支持无状态的迭代器,ipairs就是,下面例子我们实现了ipairs: ```lua ---自定义迭代函数实例 local tmpHeroNameArray={"HeroA","HeroB","HeroC"} function MyIPairs(varArray) ---迭代器对象,function是固定格式 function(table,index) return function(varArray,varIndex) local tmpIndex=varIndex+1 if tmpIndex<=#varArray then return tmpIndex,varArray[tmpIndex] end end,varArray,0 end for tmpIndex,tmpHeroName in MyIPairs(tmpHeroNameArray) do print(tmpIndex,tmpHeroName) end ``` 输出结果: 1 HeroA 2 HeroB 3 HeroC
<< Lua 数组
Lua table(表) >>
local tmpHeroNameArray={"HeroA","HeroB","HeroC"} for key,value in pairs(tmpHeroNameArray) do print(key,value) end print(pairs)
提交
5e4d0c9c5583ae0d2806bed2