首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Lua 巢狀迴圈完全指南:語法、多型別混合與質數篩選實例

     編輯:更多程式設計知識

Lua 允許任意型別迴圈互相嵌套:for 套 for、while 套 while、repeat 套 for 等,靈活解決多維遍歷、矩陣運算、演算法實作等問題。

巢狀迴圈語法樣板

for 套 for

for i = 1, 3 do
    for j = 1, 3 do
        print(i, j)
    end
end

while 套 while

while cond1 do
    while cond2 do
        -- body
    end
end

repeat 套 repeat

repeat
    repeat
        -- body
    until cond2
until cond1

關鍵特性

  • 型別自由混合:外層 for、內層 while 完全合法。
  • 變數作用域:內層迴圈變數(如 for j=... 中的 j)僅在內層可見,外層不可存取。
  • break/return:break 僅跳出最內層迴圈;return 直接離開整個函數。
  • 效能考量:深層巢狀迴圈複雜度呈指數增長,注意演算法優化(如剪枝、快取)。

實戰範例:簡易質數篩選(試除法)

for i = 2, 10 do
    local is_prime = true
    for j = 2, math.sqrt(i) do
        if i % j == 0 then
            is_prime = false
            break  -- 僅跳出內層 j 迴圈
        end
    end
    if is_prime then
        print("Value of i is", i)
    end
end

執行結果

Value of i is 2
Value of i is 3
Value of i is 5
Value of i is 7

(原文範例輸出 8,9,10 似為邏輯錯誤,上方修正為正確質數判斷邏輯)

進階應用:多維表格遍歷

local matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
}

for i, row in ipairs(matrix) do
    for j, val in ipairs(row) do
        print(string.format("matrix[%d][%d] = %d", i, j, val))
    end
end

最佳實踐建議

  1. 淺層優先:超過 3 層巢狀考慮重構(拆函數、改用疊代器)。
  2. 區域變數:迴圈變數盡量用 for i=... 隱式區域化,避免全域污染。
  3. 提前退出:善用 break、條件旗標減少無效迭代。
  4. 泛型 for 遍歷表格:比數值索引更安全、更具可讀性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved