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 endendfor i,n in square,3,0do print(i,n)end
 
多狀態迭代器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章