Lua开发学习4-普通循环和迭代器循环
說句實話,每當(dāng)看到Lua代碼,我都感覺是半個SQL代碼,寫起來還是感覺有點(diǎn)恐怖。
while循環(huán):
與C#的while循環(huán)類似,沒有什么好說的;
--------Lua的while循環(huán) while(condition)dostatementsend?
For循環(huán)
exp1為起點(diǎn),exp2為終點(diǎn),exp3為步進(jìn)值,若exp3沒有寫,則默認(rèn)為1
Lua的For循環(huán) for var=exp1,exp2,exp3 do <執(zhí)行體> end?
Repeat循環(huán):
看起來很高大上的說法, 實則就是我們平時使用的do..while循環(huán)而已
a = 10 --[ 執(zhí)行循環(huán) --] repeatprint("a的值為:", a)a = a + 1 until( a > 15 )?
迭代器循環(huán):
C#里面的迭代器循環(huán)使用的最多的當(dāng)然是foreach循環(huán)了,當(dāng)然協(xié)程也是個迭代器循環(huán),我們這里只是舉例,所以我們這里就不要講太多了
array = {"Lua", "Tutorial"} --一個Table,也能想象成一個字典lua的迭代器分為無狀態(tài)迭代器和多狀態(tài)迭代器
無狀態(tài)迭代器:
function square(iteratorMaxCount,currentNumber)if currentNumber<iteratorMaxCountthencurrentNumber = currentNumber+1return currentNumber, currentNumber*currentNumberend endfor i,n in square,3,0 --square是一個可以參與運(yùn)行的函數(shù),3和0為參數(shù) doprint(i,n) end多狀態(tài)迭代器:
多狀態(tài)迭代器可以遍歷一個函數(shù)的結(jié)果集和pairs和ipairs兩種特殊迭代方式
迭代函數(shù)的結(jié)果集:
array = {"Lua", "Tutorial"}function elementIterator (collection)local index = 0local count = #collection --井號能取出collection參數(shù)的數(shù)量,若為[1] = ,[2] = ,則取出從第一個元素連續(xù)最多元素的數(shù)量,假如沒有3,直接跳到了[4] = ,則#collection的值為2-- 閉包函數(shù)return function ()index = index + 1if index <= countthen-- 返回迭代器的當(dāng)前元素return collection[index]endend endfor element in elementIterator(array) doprint(element) end?
pairs: 迭代 table,可以遍歷表中所有的 key 可以返回 nil
ipairs: 迭代數(shù)組,不能返回 nil,如果遇到 nil 則退出
local tab= { [1] = "a", [3] = "b", [4] = "c" } for i,v in pairs(tab) do -- 輸出 "a" ,"b", "c" ,print( tab[i] ) end for i,v in ipairs(tab) do -- 輸出 "a" ,k=2時斷開 print( tab[i] ) endipairs的迭代,會像C#的foreach那樣,挨個寫入堆棧。
但重要點(diǎn)說明一下paris跌代,或取的數(shù)據(jù)順序并不是一個讓人很好理解的順序,因為它并不會按照1234這種順序排下來,paris迭代產(chǎn)生的結(jié)果列表的排列,是按照一定的希哈規(guī)律來排列的,所以并不是無規(guī)則的無序,而是按哈規(guī)則的有序。
如果數(shù)據(jù)量非常龐大的話,paris的希哈排列,會造成性能上非常大的優(yōu)勢,倘若將列表值賦值給C#,然后以linq、lambda的方式來取,則也并不需要有序。
所以不要糾結(jié)于paris中看似無序?qū)崉t有序的排列。
轉(zhuǎn)載于:https://www.cnblogs.com/vsirWaiter/p/6712529.html
總結(jié)
以上是生活随笔為你收集整理的Lua开发学习4-普通循环和迭代器循环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: opencv3.2.0 Cmake 3.
- 下一篇: 团队合作及个人成长