Lua迭代器与泛型for

迭代器:
一种可以遍历(iterator over)一种集合中所有元素的机制。(在Lua中,通常将迭代器表示为函数。每调用一次函数,即返回集合中的“下一个”元素)
 
泛型for
for in do
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
 
多状态迭代器

你可能感兴趣的:(Lua迭代器与泛型for)