HoRain云--Lua循环控制全攻略
本文详细介绍了Lua语言中的循环控制结构,包括while循环、repeat-until循环、数值型for循环和泛型for循环四种主要类型。文章通过基本语法说明和丰富示例展示了每种循环的使用方法,特别强调了泛型for循环中常用的ipairs、pairs等迭代器。此外,还介绍了循环控制语句(如break)、高级循环技巧(自定义迭代器、多重赋值等)、性能优化建议以及常见陷阱。最后提供了斐波那契数列、数组

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

Lua 循环控制结构详解
Lua 提供了多种循环结构,下面详细说明每种循环的语法、特性和使用示例。
一、循环类型概览
|
循环类型 |
描述 |
使用场景 |
|---|---|---|
|
|
条件循环 |
条件不明确时 |
|
|
直到型循环 |
至少执行一次 |
|
|
计数循环 |
已知迭代次数 |
|
泛型 |
迭代器循环 |
遍历表、文件等 |
二、while 循环
基本语法
while condition do
-- 循环体
end
示例
-- 基础示例
local i = 1
while i <= 5 do
print("计数: " .. i)
i = i + 1
end
-- 复杂条件
local x = 10
while x > 0 and x % 2 == 0 do
print("偶数: " .. x)
x = x - 2
end
-- 无限循环(需要有退出机制)
local running = true
while running do
print("处理中...")
-- 某个条件改变 running 为 false
if some_condition then
running = false
end
end
三、repeat-until 循环
基本语法
repeat
-- 循环体
until condition -- 条件为真时退出
特点
-
至少执行一次
-
条件在循环体之后检查
示例
-- 基础示例
local i = 1
repeat
print("值: " .. i)
i = i + 1
until i > 5
-- 用户输入验证
local answer
repeat
print("请输入 yes 或 no:")
answer = io.read()
until answer == "yes" or answer == "no"
-- 计算直到满足条件
local n = 1
repeat
n = n * 2
print("n = " .. n)
until n > 100
四、for 循环(数值型)
基本语法
for var = start, end, step do
-- 循环体
end
-
step默认为 1,可为正数或负数 -
循环变量
var是局部变量
示例
-- 正序递增
for i = 1, 5 do
print("i = " .. i)
end
-- 输出: 1 2 3 4 5
-- 指定步长
for i = 1, 10, 2 do
print("奇数: " .. i)
end
-- 输出: 1 3 5 7 9
-- 倒序
for i = 5, 1, -1 do
print("倒计时: " .. i)
end
-- 输出: 5 4 3 2 1
-- 浮点数(不推荐,通常用整数)
for i = 0.0, 1.0, 0.2 do
print(string.format("i = %.1f", i))
end
-- 嵌套循环
for i = 1, 3 do
for j = 1, 3 do
print(i .. "x" .. j .. " = " .. i*j)
end
end
五、泛型 for 循环
基本语法
for var_list in expression_list do
-- 循环体
end
常用迭代器
1. ipairs- 遍历数组部分
local fruits = {"apple", "banana", "cherry"}
for i, fruit in ipairs(fruits) do
print(i .. ": " .. fruit)
end
2. pairs- 遍历所有键值对
local person = {
name = "Alice",
age = 25,
city = "Beijing"
}
for key, value in pairs(person) do
print(key .. ": " .. tostring(value))
end
3. 文件行迭代
-- 遍历文件每一行
for line in io.lines("data.txt") do
print("行: " .. line)
end
4. 字符串匹配迭代
local text = "hello world from lua"
for word in string.gmatch(text, "%a+") do
print("单词: " .. word)
end
六、循环控制语句
1. break- 跳出循环
-- 在 while 中
local i = 1
while true do
if i > 5 then
break
end
print(i)
i = i + 1
end
-- 在 for 中
for i = 1, 10 do
if i == 6 then
break
end
print(i)
end
2. Lua 没有 continue语句
-- 模拟 continue
for i = 1, 10 do
if i % 2 == 0 then
goto skip_rest -- 使用 goto 模拟
end
print("奇数: " .. i)
::skip_rest::
end
-- 使用 if-else 替代
for i = 1, 10 do
if i % 2 ~= 0 then
print("奇数: " .. i)
end
end
七、高级循环技巧
1. 自定义迭代器
-- 创建自定义迭代器
function squares(limit)
local i = 0
return function()
i = i + 1
if i <= limit then
return i, i * i
end
end
end
-- 使用自定义迭代器
for n, square in squares(5) do
print(n .. " 的平方是 " .. square)
end
2. 多重赋值
-- 同时遍历多个表
local names = {"Alice", "Bob", "Charlie"}
local ages = {25, 30, 35}
for i, name in ipairs(names) do
print(name .. " 年龄 " .. ages[i])
end
3. 保护模式
-- 在循环中处理异常
local data = {1, 2, "three", 4, 5}
for i, value in ipairs(data) do
local success, result = pcall(function()
return value * 2
end)
if success then
print("结果: " .. result)
else
print("错误: 索引 " .. i .. " 的值无法计算")
end
end
八、性能考虑
-- 避免在循环中创建表
-- 不推荐
for i = 1, 10000 do
local t = {} -- 每次循环都创建新表
-- 操作
end
-- 推荐
local t = {}
for i = 1, 10000 do
-- 复用表
t = {} -- 或 table.clear(t)
-- 操作
end
-- 预计算循环条件
-- 不推荐
for i = 1, #some_table do
-- 循环体
end
-- 推荐(当表大小不变时)
local size = #some_table
for i = 1, size do
-- 循环体
end
九、常见陷阱
-- 1. 不要在循环中修改循环变量(for 循环)
for i = 1, 10 do
i = i + 1 -- 无效,每次迭代会重置
print(i)
end
-- 2. pairs 遍历顺序不确定
local t = {a=1, b=2, c=3, d=4}
for k, v in pairs(t) do
print(k, v) -- 顺序可能变化
end
-- 3. 无限循环
-- while true do
-- print("无限循环")
-- end
-- 需要有 break 条件
-- 4. 闭包中的循环变量
local funcs = {}
for i = 1, 5 do
funcs[i] = function()
return i -- 所有函数都引用同一个 i
end
end
-- 修正
for i = 1, 5 do
local j = i -- 创建局部副本
funcs[i] = function()
return j
end
end
十、实用示例
-- 1. 斐波那契数列
local a, b = 0, 1
for i = 1, 10 do
print(a)
a, b = b, a + b
end
-- 2. 过滤数组
local numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
local evens = {}
for _, num in ipairs(numbers) do
if num % 2 == 0 then
table.insert(evens, num)
end
end
-- 3. 查找元素
local found = false
local target = 5
local data = {2, 4, 6, 8, 10}
for i, v in ipairs(data) do
if v == target then
print("找到 " .. target .. " 在位置 " .. i)
found = true
break
end
end
if not found then
print("未找到 " .. target)
end
-- 4. 统计字符频率
local text = "hello lua world"
local freq = {}
for c in text:gmatch(".") do
freq[c] = (freq[c] or 0) + 1
end
for char, count in pairs(freq) do
print(char .. ": " .. count)
end
这些是 Lua 中循环控制结构的主要用法。根据具体需求选择合适的循环类型,并注意避免常见的陷阱。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐




所有评论(0)