了解 Lua 的 for 循環(huán)
在編程中,迭代是一個重要的概念,因為代碼通常必須多次掃描一組數(shù)據(jù),以便它可以單獨處理每個項目。控制結構使你能夠根據(jù)通常在程序運行時動態(tài)建立的條件來指導程序的流程。不同的語言提供不同的控制,在 ??Lua??? 中,有 ??while?
?? 循環(huán)、??for?
?? 循環(huán)和 ??repeat until?
?? 循環(huán)。本文介紹 ??for?
?? 循環(huán)。我將在另一篇文章中介紹 ??while?
?? 和 ??repeat until?
? 循環(huán)。
for 循環(huán)
??for?
? 循環(huán)接受已知數(shù)量的項目并確保處理每個項目。“項目”可以是數(shù)字,它也可以是一個包含多個條目或任何 Lua 數(shù)據(jù)類型的表。語法和邏輯有點靈活,但語法允許這些參數(shù),每個參數(shù)本質(zhì)上描述了一個計數(shù)器:
- 計數(shù)器的起始值
- 停止值
- 你希望計數(shù)器前進的增量
例如,假設你有三個項目并希望 Lua 處理每個項目。你的計數(shù)器可以從 3 開始一直持續(xù)到 1,增量為 -1。這呈現(xiàn)為 3、2、1 的計數(shù)。
運行代碼以確保所有三個項目都得到處理:
這段代碼有效地“反向”處理了表,因為它是倒數(shù)。你可以正數(shù):
此示例從最低索引到最高索引處理表:
增量
你也可以更改增量。例如,也許你想要一個沒有萬圣節(jié)盛況的僵尸啟示錄:
運行代碼:
該示例打印了 1 和 3,因為第一個計數(shù)是 1,然后遞增 2(總共 3)。
計數(shù)器
有時你不知道需要 Lua 遍歷數(shù)據(jù)的次數(shù)。在這種情況下,你可以將計數(shù)器設置為由其他進程填充的變量。
另外,??count?
?? 這個詞不是關鍵字。為了清楚起見,這正是我在示例代碼中使用的內(nèi)容。程序員通常使用更短的名稱,例如 ??i?
?? 或 ??c?
?。
此代碼創(chuàng)建一個變量,其中包含啟動時的時間戳。如果時間戳是偶數(shù)(除以 2 時模數(shù)為 0),則只將時間戳放入表中。如果時間戳是奇數(shù),它將三個字符串放入一個表中。
現(xiàn)在你無法確定你的 ??for?
?? 循環(huán)需要運行多少次。可能是一次或是三次,但沒有辦法確定。解決方案是將起始計數(shù)設置為 1,將最終計數(shù)設置為表的長度(??#mytable?
? 是確定表長度的內(nèi)置快捷方式)。
可能需要多次運行腳本才能看到這兩個結果,但最終,你會得到如下結果:
帶 pairs 和 ipairs 的 for 循環(huán)
如果你已經(jīng)閱讀了我關于 ??表迭代??? 的文章,那么你已經(jīng)熟悉了 Lua 中最常見的 ??for?
?? 循環(huán)之一。這個使用 ??pairs?
?? 或 ??ipairs?
? 函數(shù)來迭代一個表:
??pairs?
?? 和 ??ipairs?
?? 函數(shù)“解包”表并將值轉(zhuǎn)儲到你提供的變量中。在此示例中,我將 ??i?
? 用于 索引,將 ??v?
? 用于 值,但變量名稱無關緊要。
for 循環(huán)
??for?
?? 循環(huán)結構在編程中很常見,由于經(jīng)常使用表和 ??pairs?
?? 函數(shù),因此在 Lua 中非常常見。了解 ??for?
? 循環(huán)結構和控制它時的選項意味著你可以就如何在 Lua 中處理數(shù)據(jù)做出明智的決定。