国际访客建议访问 Primers 编程伙伴 国际版站点 > Lua 教程 > for...in 循环语句 以获得更好的体验。

# Lua 的 for ... in 循环语句

Lua 中的 for ... in 循环(泛型 for 循环)用于遍历迭代器函数返回的值序列。这是遍历表、数组和其他可迭代对象的常用方式。

for 变量列表 in 迭代器函数, 状态值, 控制值 do
    -- 循环体
end
  • 每轮循环调用 迭代器函数,参数是 状态值控制值,其返回值会赋值给 变量列表

  • 状态值 始终不变,用于提供额外的信息

  • 控制值 记录上次迭代的位置,会被 迭代器函数 的返回第一个返回值更新

  • 迭代器函数 的返回第一个返回值为 nil 时结束循环

graph TD
    START([开始]) --> INVOKE("迭代器函数(状态值, 控制值)") --> ASSIGN("变量列表 = 迭代器返回值") --> CTRL("控制值 = 第一个返回值") --> COND{"控制值 == nil?"} -- 真 --> END([结束])
    COND -- 假 --> 循环体 --> INVOKE

示例:

-- 迭代器函数
function iterator(state, control)
    control = control + 1
    if control < state then
        return control, control * control -- 返回索引和值
    end
end

-- 循环
for i, v in iterator, 10, 5 do
    print("索引:", i, "值:", v)
end
  • 状态值为 10

  • 初始控制值为 5

运行结果:

索引:   6       值:     36
索引:   7       值:     49
索引:   8       值:     64
索引:   9       值:     81

# 遍历表

Lua 标准库中提供 ipairspairs 函数用于遍历表,前者用于数组,后者用于一般的表。

示例:

-- 定义数组
local array = {10, 20, 30, 40, 50}

-- 遍历数组
for i,v in ipairs(array) do
    print(i, v)
end

-- 定义表
local dict = {
    name = "Alice",
    age = 25,
    city = "Beijing"
}

-- 遍历
for k,v in pairs(dict) do
    print(k, v)
end

运行结果:

1       10
2       20
3       30
4       40
5       50
name    Alice
city    Beijing
age     25
本文 更新于: 2025-11-27 09:38:12 创建于: 2025-11-27 09:38:12