Lua迭代器与泛型for

迭代器:
一种可以遍历(iterator over)一种集合中所有元素的机制。(在Lua中,通常将迭代器表示为函数。每调用一次函数,即返回集合中的“下一个”元素)
 
泛型for
for <var-list> in <exp-list> do
<body>
end
 
for i, v in ipairs(a) do print(v) end --打印数组a中所有值
 
泛型for的使用
days = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
现在要将一个名称转换成它在一周中的位置。为此, 需要根据给定的名称来搜索这个table。然而在Lua中, 通常更有效的方式是创建一个“逆向table"。
revDays = { ["Sunday"] = 1, ["Monday"] = 2, ["Tuesday"] = 3, ["Wednesday"] = 4 , ["Thursday"] = 5, ["Friday"] = 6 , ["Saturday"] = 7 }
 
revDays = { }
for k, v in pairs(days) do
revDays[v] = k
end
 
array = { "Lua" , "Tutorial" } for key ,value in ipairs (array ) do print (key , value ) end
 
pairs 和 ipairs区别
  •  pairs: 迭代 table,可以遍历表中所有的 key 可以返回 nil
  •  ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
 
 
无状态的迭代器
无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。
 
function square (iteratorMaxCount ,currentNumber ) if currentNumber <iteratorMaxCount then currentNumber = currentNumber + 1 return currentNumber , currentNumber *currentNumber end end for i ,n in square , 3 , 0 do print (i ,n ) end
 
多状态迭代器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值