了解 Lua 的 for 循环 | Linux 中国
本文字数:2553,阅读时长大约:3分钟
了解 for 循环结构和你在控制它时拥有的选项,这样你可以对如何在 Lua 中处理数据做出聪明的决定。
在编程中,迭代是一个重要的概念,因为代码通常必须多次扫描一组数据,以便它可以单独处理每个项目。控制结构使你能够根据通常在程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控制,在 Lua 中,有
while
循环、for
循环和 repeat until
循环。本文介绍 for
循环。我将在另一篇文章中介绍 while
和 repeat until
循环。for 循环
for
循环接受已知数量的项目并确保处理每个项目。“项目”可以是数字,它也可以是一个包含多个条目或任何 Lua 数据类型的表。语法和逻辑有点灵活,但语法允许这些参数,每个参数本质上描述了一个计数器:例如,假设你有三个项目并希望 Lua 处理每个项目。你的计数器可以从 3 开始一直持续到 1,增量为 -1。这呈现为 3、2、1 的计数。
mytable ={"zombie","Halloween","apocalypse"}
for count =3,1,-1do
print(count ..": ".. mytable[count])
end
运行代码以确保所有三个项目都得到处理:
$ lua ./for.lua
3: apocalypse
2:Halloween
1: zombie
这段代码有效地“反向”处理了表,因为它是倒数。你可以正数:
for count =1,3,1do
print(mytable[count])
end
此示例从最低索引到最高索引处理表:
$ lua ./for.lua
1: zombie
2:Halloween
3: apocalypse
增量
你也可以更改增量。例如,也许你想要一个没有万圣节盛况的僵尸启示录:
mytable ={"zombie","Halloween","apocalypse"}
for count =1,3,2do
print(mytable[count])
end
运行代码:
$ lua ./for.lua
zombie
apocalypse
该示例打印了 1 和 3,因为第一个计数是 1,然后递增 2(总共 3)。
计数器
有时你不知道需要 Lua 遍历数据的次数。在这种情况下,你可以将计数器设置为由其他进程填充的变量。
另外,
count
这个词不是关键字。为了清楚起见,这正是我在示例代码中使用的内容。程序员通常使用更短的名称,例如 i
或 c
。var= os.time()
ifvar%2==0then
mytable ={var}
else
mytable ={"foo","bar","baz"}
end
for c =1,#mytable,1do
print(mytable[c])
end
此代码创建一个变量,其中包含启动时的时间戳。如果时间戳是偶数(除以 2 时模数为 0),则只将时间戳放入表中。如果时间戳是奇数,它将三个字符串放入一个表中。
现在你无法确定你的
for
循环需要运行多少次。可能是一次或是三次,但没有办法确定。解决方案是将起始计数设置为 1,将最终计数设置为表的长度(#mytable
是确定表长度的内置快捷方式)。可能需要多次运行脚本才能看到这两个结果,但最终,你会得到如下结果:
$ lua ./dynamic.lua1665447960
$ lua ./dynamic.lua
foo
bar
baz
带 pairs 和 ipairs 的 for 循环
mytable ={"zombie","Halloween","apocalypse"}
for i,v in ipairs(mytable)do
print(i ..": " v)
end
pairs
和 ipairs
函数“解包”表并将值转储到你提供的变量中。在此示例中,我将 i
用于 索引,将 v
用于 值,但变量名称无关紧要。$ lua ./for.lua1: zombie2:Halloween3: apocalypse
for 循环
for
循环结构在编程中很常见,由于经常使用表和 pairs
函数,因此在 Lua 中非常常见。了解 for
循环结构和控制它时的选项意味着你可以就如何在 Lua 中处理数据做出明智的决定。最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。