迭代器:
一种可以遍历(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
多状态迭代器