新聞中心
在編程中,迭代是一個(gè)重要的概念,因?yàn)榇a通常必須多次掃描一組數(shù)據(jù),以便它可以單獨(dú)處理每個(gè)項(xiàng)目??刂平Y(jié)構(gòu)使你能夠根據(jù)通常在程序運(yùn)行時(shí)動(dòng)態(tài)建立的條件來指導(dǎo)程序的流程。不同的語言提供不同的控制,在 ??Lua??? 中,有 ??while??? 循環(huán)、??for??? 循環(huán)和 ??repeat until??? 循環(huán)。本文介紹 ??for??? 循環(huán)。我將在另一篇文章中介紹 ??while??? 和 ??repeat until?? 循環(huán)。

創(chuàng)新互聯(lián)專注于吉林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供吉林營銷型網(wǎng)站建設(shè),吉林網(wǎng)站制作、吉林網(wǎng)頁設(shè)計(jì)、吉林網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造吉林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供吉林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
for 循環(huán)
??for?? 循環(huán)接受已知數(shù)量的項(xiàng)目并確保處理每個(gè)項(xiàng)目?!绊?xiàng)目”可以是數(shù)字,它也可以是一個(gè)包含多個(gè)條目或任何 Lua 數(shù)據(jù)類型的表。語法和邏輯有點(diǎn)靈活,但語法允許這些參數(shù),每個(gè)參數(shù)本質(zhì)上描述了一個(gè)計(jì)數(shù)器:
- 計(jì)數(shù)器的起始值
- 停止值
- 你希望計(jì)數(shù)器前進(jìn)的增量
例如,假設(shè)你有三個(gè)項(xiàng)目并希望 Lua 處理每個(gè)項(xiàng)目。你的計(jì)數(shù)器可以從 3 開始一直持續(xù)到 1,增量為 -1。這呈現(xiàn)為 3、2、1 的計(jì)數(shù)。
mytable = { "zombie", "Halloween", "apocalypse" }for count = 3, 1, -1 do print(count .. ": " .. mytable[count])end運(yùn)行代碼以確保所有三個(gè)項(xiàng)目都得到處理:
$ lua ./for.lua3: apocalypse2: Halloween1: zombie
這段代碼有效地“反向”處理了表,因?yàn)樗堑箶?shù)。你可以正數(shù):
for count = 1, 3, 1 do print(mytable[count])end
此示例從最低索引到最高索引處理表:
$ lua ./for.lua1: zombie2: Halloween3: apocalypse
增量
你也可以更改增量。例如,也許你想要一個(gè)沒有萬圣節(jié)盛況的僵尸啟示錄:
mytable = { "zombie", "Halloween", "apocalypse" }for count = 1, 3, 2 do print(mytable[count])end運(yùn)行代碼:
$ lua ./for.luazombieapocalypse
該示例打印了 1 和 3,因?yàn)榈谝粋€(gè)計(jì)數(shù)是 1,然后遞增 2(總共 3)。
計(jì)數(shù)器
有時(shí)你不知道需要 Lua 遍歷數(shù)據(jù)的次數(shù)。在這種情況下,你可以將計(jì)數(shù)器設(shè)置為由其他進(jìn)程填充的變量。
另外,??count??? 這個(gè)詞不是關(guān)鍵字。為了清楚起見,這正是我在示例代碼中使用的內(nèi)容。程序員通常使用更短的名稱,例如 ??i??? 或 ??c??。
var = os.time()if var%2 == 0 then mytable = { var }else mytable = { "foo", "bar", "baz" }endfor c = 1, #mytable, 1 do print(mytable[c])end此代碼創(chuàng)建一個(gè)變量,其中包含啟動(dòng)時(shí)的時(shí)間戳。如果時(shí)間戳是偶數(shù)(除以 2 時(shí)模數(shù)為 0),則只將時(shí)間戳放入表中。如果時(shí)間戳是奇數(shù),它將三個(gè)字符串放入一個(gè)表中。
現(xiàn)在你無法確定你的 ??for??? 循環(huán)需要運(yùn)行多少次??赡苁且淮位蚴侨危珱]有辦法確定。解決方案是將起始計(jì)數(shù)設(shè)置為 1,將最終計(jì)數(shù)設(shè)置為表的長度(??#mytable?? 是確定表長度的內(nèi)置快捷方式)。
可能需要多次運(yùn)行腳本才能看到這兩個(gè)結(jié)果,但最終,你會得到如下結(jié)果:
$ lua ./dynamic.lua1665447960$ lua ./dynamic.luafoobarbaz
帶 pairs 和 ipairs 的 for 循環(huán)
如果你已經(jīng)閱讀了我關(guān)于 ??表迭代??? 的文章,那么你已經(jīng)熟悉了 Lua 中最常見的 ??for??? 循環(huán)之一。這個(gè)使用 ??pairs??? 或 ??ipairs?? 函數(shù)來迭代一個(gè)表:
mytable = { "zombie", "Halloween", "apocalypse" }for i,v in ipairs(mytable) do print(i .. ": " v)end??pairs??? 和 ??ipairs??? 函數(shù)“解包”表并將值轉(zhuǎn)儲到你提供的變量中。在此示例中,我將 ??i?? 用于 索引,將 ??v?? 用于 值,但變量名稱無關(guān)緊要。
$ lua ./for.lua1: zombie2: Halloween3: apocalypse
for 循環(huán)
??for??? 循環(huán)結(jié)構(gòu)在編程中很常見,由于經(jīng)常使用表和 ??pairs??? 函數(shù),因此在 Lua 中非常常見。了解 ??for?? 循環(huán)結(jié)構(gòu)和控制它時(shí)的選項(xiàng)意味著你可以就如何在 Lua 中處理數(shù)據(jù)做出明智的決定。
當(dāng)前文章:了解 Lua 的 for 循環(huán)
網(wǎng)站路徑:http://m.fisionsoft.com.cn/article/dphhpdg.html


咨詢
建站咨詢
