了解 Lua 的 for 循环
创始人
2024-03-02 13:32:00
0

了解 for 循环结构和你在控制它时拥有的选项,这样你可以对如何在 Lua 中处理数据做出聪明的决定。

在编程中,迭代是一个重要的概念,因为代码通常必须多次扫描一组数据,以便它可以单独处理每个项目。控制结构使你能够根据通常在程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控制,在 Lua 中,有 while 循环、for 循环和 repeat until 循环。本文介绍 for 循环。我将在另一篇文章中介绍 whilerepeat until 循环。

for 循环

for 循环接受已知数量的项目并确保处理每个项目。“项目”可以是数字,它也可以是一个包含多个条目或任何 Lua 数据类型的表。语法和逻辑有点灵活,但语法允许这些参数,每个参数本质上描述了一个计数器:

  • 计数器的起始值
  • 停止值
  • 你希望计数器前进的增量

例如,假设你有三个项目并希望 Lua 处理每个项目。你的计数器可以从 3 开始一直持续到 1,增量为 -1。这呈现为 3、2、1 的计数。

mytable = { "zombie", "Halloween", "apocalypse" }
for count = 3, 1, -1 do
  print(count .. ": " .. mytable[count])
end

运行代码以确保所有三个项目都得到处理:

$ lua ./for.lua
3: apocalypse
2: Halloween
1: zombie

这段代码有效地“反向”处理了表,因为它是倒数。你可以正数:

for count = 1, 3, 1 do
  print(mytable[count])
end

此示例从最低索引到最高索引处理表:

$ lua ./for.lua
1: zombie
2: Halloween
3: apocalypse

增量

你也可以更改增量。例如,也许你想要一个没有万圣节盛况的僵尸启示录:

mytable = { "zombie", "Halloween", "apocalypse" }
for count = 1, 3, 2 do
  print(mytable[count])
end

运行代码:

$ lua ./for.lua
zombie
apocalypse

该示例打印了 1 和 3,因为第一个计数是 1,然后递增 2(总共 3)。

计数器

有时你不知道需要 Lua 遍历数据的次数。在这种情况下,你可以将计数器设置为由其他进程填充的变量。

另外,count 这个词不是关键字。为了清楚起见,这正是我在示例代码中使用的内容。程序员通常使用更短的名称,例如 ic

var = os.time()
if var%2 == 0 then
  mytable = { var }
else
  mytable = { "foo", "bar", "baz" }
end
for c = 1, #mytable, 1 do
  print(mytable[c])
end

此代码创建一个变量,其中包含启动时的时间戳。如果时间戳是偶数(除以 2 时模数为 0),则只将时间戳放入表中。如果时间戳是奇数,它将三个字符串放入一个表中。

现在你无法确定你的 for 循环需要运行多少次。可能是一次或是三次,但没有办法确定。解决方案是将起始计数设置为 1,将最终计数设置为表的长度(#mytable 是确定表长度的内置快捷方式)。

可能需要多次运行脚本才能看到这两个结果,但最终,你会得到如下结果:

$ lua ./dynamic.lua1665447960
$ lua ./dynamic.lua
foo
bar
baz

带 pairs 和 ipairs 的 for 循环

如果你已经阅读了我关于 表迭代 的文章,那么你已经熟悉了 Lua 中最常见的 for 循环之一。这个使用 pairsipairs 函数来迭代一个表:

mytable = { "zombie", "Halloween", "apocalypse" }
for i,v in ipairs(mytable) do
  print(i .. ": " v)
end

pairsipairs 函数“解包”表并将值转储到你提供的变量中。在此示例中,我将 i 用于 索引,将 v 用于 ,但变量名称无关紧要。

$ lua ./for.lua1: zombie2: Halloween3: apocalypse

for 循环

for 循环结构在编程中很常见,由于经常使用表和 pairs 函数,因此在 Lua 中非常常见。了解 for 循环结构和控制它时的选项意味着你可以就如何在 Lua 中处理数据做出明智的决定。


via: https://opensource.com/article/22/11/lua-for-loops

作者:Seth Kenlon 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

器械宝典2.0|深瑞达 D...
Introduction 基本信息 器械名称 DEEPINTEC ...
2026-08-02 19:11:19
FORT Robotics...
AI FORT Robotics近日宣布加入Nvidia Halo...
2026-07-13 23:32:46
豆包收费,悟空走量:AI助...
文 | 数字力场,作者 | 佘宗明 虽然进度条未过半,但2026...
2026-05-15 22:36:02
蚂蚁百灵开源Ring-2....
钛媒体App 5月15日消息,蚂蚁百灵宣布开源旗舰推理模型Ring...
2026-05-15 22:20:22
速递|Anthropic发...
图片来源:Anthropic 据知情人士透露,Anthropic ...
2026-05-14 17:28:33
据AXIOS网站:Meta...
据AXIOS网站:Meta Platforms(META.O)将发...
2026-04-07 11:46:36

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...