Lua循環(huán)與迭代器函數(shù)

Lua 語(yǔ)言提供了以下幾種循環(huán)處理方式:
while 循環(huán):在條件為 true 時(shí),讓程序重復(fù)地執(zhí)行某些語(yǔ)句副瀑。執(zhí)行語(yǔ)句前會(huì)先檢查條件是否為 true

for 循環(huán):重復(fù)執(zhí)行指定語(yǔ)句糠睡,重復(fù)次數(shù)可在 for 語(yǔ)句中控制。

repeat...until :重復(fù)執(zhí)行循環(huán)狈孔,直到 指定的條件為真時(shí)為止

循環(huán)嵌套:可以在循環(huán)內(nèi)嵌套一個(gè)或多個(gè)循環(huán)語(yǔ)句(while do ... end;for ... do ... end;repeat ... until;)

一、While循環(huán)

Lua 編程語(yǔ)言中 while 循環(huán)語(yǔ)句在判斷條件為 true 時(shí)會(huì)重復(fù)執(zhí)行循環(huán)體語(yǔ)句嫁赏。
statements(循環(huán)體語(yǔ)句) 可以是一條或多條語(yǔ)句油挥,condition(條件) 可以是任意表達(dá)式款熬,在 condition(條件) 為 true 時(shí)執(zhí)行循環(huán)體語(yǔ)句贤牛。


image.png

while結(jié)構(gòu)體,輸出數(shù)字1-20

a=1
while (a<=20) do--while循環(huán)輸出1-20
print (a)
a=a+1--Lua中不能使用a++自增
end

輸出1-20奇數(shù)

a=1
while (a<=20) do--while循環(huán)輸出1-20
if (a%2==1) then
print(a)
end
a=a+1--Lua中不能使用a++自增
end
二则酝、For循環(huán)

Lua 編程語(yǔ)言中 for 循環(huán)語(yǔ)句可以重復(fù)執(zhí)行指定語(yǔ)句,重復(fù)次數(shù)可在 for 語(yǔ)句中控制喂链。
Lua 編程語(yǔ)言中 for語(yǔ)句有兩大類(lèi)::
數(shù)值for循環(huán)
泛型for循環(huán)
(1)數(shù)值 for循環(huán)
Lua 編程語(yǔ)言中數(shù)值for循環(huán)語(yǔ)法格式:

for var=start,end,step do 
循環(huán)體
end
--這里var會(huì)從start變化到end,每次變化--step步長(zhǎng)變化

例如以下for循環(huán)代碼遍歷出1-10的順序和倒序排列

for i=1,10,1 do--順序
print(i)
end

for i=10,1,-1 do--倒序
print(i)
end

(2)泛型 for循環(huán)
泛型for循環(huán)通過(guò)一個(gè)迭代器函數(shù)來(lái)遍歷所有值妥泉,類(lèi)似C#中的foreach語(yǔ)句。
Lua 編程語(yǔ)言中泛型for循環(huán)語(yǔ)法格式:

--打印tab的所有值  
for k,v in pairs(tab) 
    do print(k,v) 
end  

例如遍歷一張表中所有的key和value

tab={key1="value1",key2="value2"}

for k,v in pairs(tab) do
   print(k,v)
end

輸出結(jié)果:

key1    value1
key2    value2
三蝇率、repeat...until循環(huán)

我們注意到循環(huán)條件判斷語(yǔ)句(condition)在循環(huán)體末尾部分刽沾,所以在條件進(jìn)行判斷前循環(huán)體都會(huì)執(zhí)行一次。
如果條件判斷語(yǔ)句(condition)為 false锅尘,循環(huán)會(huì)重新開(kāi)始執(zhí)行布蔗,直到條件判斷語(yǔ)句(condition)為 true 才會(huì)停止執(zhí)行。

Lua repeat...until 循環(huán)流程圖如下:


image.png

C#中do while 是當(dāng)滿(mǎn)足條件執(zhí)行而repeat until是直到滿(mǎn)足條件停止執(zhí)行
例如如下程序輸出數(shù)字1-10

repeat
 print(b)
 b=b+1
 until (b>10)--直到b>10才會(huì)停止執(zhí)行
四顿乒、循環(huán)嵌套

例子:我們輸出1輸出一次2輸出2次以此類(lèi)推10輸出十次泽谨,我們用for嵌套for和for嵌套while試試,代碼如下

 for i=1,10 do
   for j=1,i do
    print(i)
   end
 end
 
 
for i=1,10 do
 j=1
 while (j<=i)
  print(i)
  j=j+1
 end
end

IF語(yǔ)句
if語(yǔ)句結(jié)構(gòu)

if(布爾表達(dá)式)then 
為true的時(shí)候要執(zhí)行的代碼
end
五、迭代器函數(shù)(pairs與ipairs)

迭代器(iterator)是一種對(duì)象骨杂,它能夠用來(lái)遍歷標(biāo)準(zhǔn)模板庫(kù)容器中的部分或全部元素雄卷,每個(gè)迭代器對(duì)象代表容器中的確定的地址
在Lua中迭代器是一種支持指針類(lèi)型的結(jié)構(gòu),它可以遍歷集合的每一個(gè)元素陕凹。

在遍歷table的時(shí)候有一個(gè)pairs函數(shù)還有另一個(gè)ipairs函數(shù),那么這兩個(gè)有什么區(qū)別呢
pairs:迭代 table杜耙,可以遍歷表中所有的 key 可以返回 nil
ipairs:迭代數(shù)組,不能返回 nil,如果遇到 nil 則退出

array={"Lua","C#","JAVA","C"}
array[2]=nil

for k,v in pairs(array) do
print(k,v)
end

for k,v in ipairs(array) do
print(k,v)
end

輸出結(jié)果

1   Lua
3   JAVA
4   C
1   Lua

pairs迭代table记靡,遍歷表中所有的Key和Value
ipairs安裝索引從1開(kāi)始团驱,遞增遍歷,遇到nil值就停止
自定義迭代函數(shù)

以下是泛型for的結(jié)構(gòu)體

for 變量列表 in 迭代函數(shù) 狀態(tài)變量 控制變量 do
  --循環(huán)體
end

執(zhí)行過(guò)程:
1,調(diào)用迭代函數(shù)寸痢,(把狀態(tài)變量和控制變量當(dāng)作參數(shù)傳遞給迭代函數(shù))
2紊选,如果迭代函數(shù)的返回值為nil,退出for循環(huán)
如果不是nil的話(huà)献烦,把返回值賦值給變量列表卖词,并執(zhí)行循環(huán)體

--自定義迭代函數(shù)
--state(狀態(tài)變量):循環(huán)的次數(shù)  control(控制變量):當(dāng)前循環(huán)次數(shù)
function square(state,control)
  if(control>=state)then
     return nil
  else
  control=control+1
     return control,control*control

  end
end
--遍歷
for i,j in square,9,0 do
 print(i,j)
end

輸出結(jié)果

1   1
2   4
3   9
4   16
5   25
6   36
7   49
8   64
9   81
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市即横,隨后出現(xiàn)的幾起案子舶替,更是在濱河造成了極大的恐慌杠园,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陈醒,死亡現(xiàn)場(chǎng)離奇詭異瞧甩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)肚逸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膝晾,“玉大人血当,你說(shuō)我怎么就攤上這事‰瘢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵佳谦,是天一觀的道長(zhǎng)撤奸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)矢棚,這世上最難降的妖魔是什么府喳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮兜粘,結(jié)果婚禮上弯蚜,老公的妹妹穿的比我還像新娘。我一直安慰自己碎捺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布晋柱。 她就那樣靜靜地躺著诵叁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪碑诉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天漫仆,我揣著相機(jī)與錄音泪幌,去河邊找鬼。 笑死祸泪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懂扼。 我是一名探鬼主播右蒲,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陷嘴!你這毒婦竟也來(lái)了间坐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劳澄,失蹤者是張志新(化名)和其女友劉穎蜈七,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體飒硅,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狡相,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年食磕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滔悉。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖曹宴,靈堂內(nèi)的尸體忽然破棺而出歉提,到底是詐尸還是另有隱情,我是刑警寧澤苔巨,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布侄泽,位于F島的核電站礁芦,受9級(jí)特大地震影響悼尾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜未状,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一析桥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翻伺,春花似錦沮焕、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)急灭。三九已至谷遂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畴嘶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工区匣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒋院,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓铸屉,卻偏偏與公主長(zhǎng)得像切端,于是被迫代替她去往敵國(guó)和親彻坛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踏枣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,763評(píng)論 0 38
  • 很多情況下我們需要做一些有規(guī)律性的重復(fù)操作间驮,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句马昨。 一組被重復(fù)執(zhí)行的語(yǔ)句稱(chēng)之為循環(huán)體...
    誰(shuí)說(shuō)我是小小云閱讀 274評(píng)論 0 0
  • 1.介紹 1.1 SMB Server Message Block 微軟歷史上出現(xiàn)安全問(wèn)題最多的協(xié)議 實(shí)現(xiàn)復(fù)雜 默...
    cybeyond閱讀 1,872評(píng)論 0 0
  • 還記得我們最初的相遇嗎匙奴, 還記得那些日子里的文字和故事嗎 還記得我們倚仗著青春, 肆無(wú)忌憚的笑嗎泼菌, 那些狂傲到極致...
    瀧子閱讀 305評(píng)論 0 1
  • 一望可相見(jiàn)赋除,一步如重城。所愛(ài)隔山海举农,山海不可平敞嗡。 第一次讀到這句話(huà),是剛收到大學(xué)入取通知書(shū)喉悴,迫不及待去貼吧去了解新...
    她生活閱讀 418評(píng)論 0 0