当前位置: 首页 > 科技观察

理解Lua的for循环

时间:2023-03-20 11:20:31 科技观察

迭代是编程中的一个重要概念,因为代码通常必须多次扫描一组数据,以便它可以单独处理每一项。控制结构使您能够根据通常在程序运行时动态建立的条件来指导程序的流程。不同的语言提供不同的控件。在Lua中,有while循环、for循环和repeatuntil循环。本文介绍for循环。我将在另一篇文章中介绍while和repeatuntil循环。for循环for循环接受已知数量的项目并确保处理每个项目。“item”可以是一个数字,也可以是一个包含多个条目的表或任何Lua数据类型。语法和逻辑有点灵活,但语法允许这些参数,每个参数本质上描述了一个计数器:计数器的起始值停止值您希望计数器前进的增量例如,假设您有三个items并希望Lua处理每个item。您的计数器可以从3开始,然后以-1为增量增加到1。这呈现为3、2、1的计数。mytable={"zombie","Halloween","apocalypse"}forcount=3,1,-1doprint(count..":"..mytable[count])end运行代码以确保所有三个项目都得到处理:$lua./for.lua3:apocalypse2:Halloween1:zombie这段代码有效地“反转”了表格,因为它是反转的。你可以正计数:forcount=1,3,1doprint(mytable[count])endthisexampleprocesstablefromlowestindextohighestindex:$lua./for.lua1:zombie2:Halloween3:apocalypseincrementyoualso增量可以改变。例如,也许你想要一个没有万圣节盛会的僵尸启示录:mytable={"zombie","Halloween","apocalypse"}forcount=1,3,2doprint(mytable[count])end运行代码:$lua./for.luazombieapocalypse此示例打印1和3,因为第一个计数是1,然后递增2(总共3)。计数器有时您不知道需要Lua遍历数据多少次。在这种情况下,您可以将计数器设置为由其他进程填充的变量。另外,字数不是关键字。为清楚起见,这正是我在示例代码中使用的内容。程序员经常使用较短的名称,例如i或c。var=os.time()ifvar%2==0thenmytable={var}elsemytable={"foo","bar","baz"}endforc=1,#mytable,1doprint(mytable[c])end此代码创建一个变量,其中包含开始时的时间戳。只有偶数时才将时间戳放入表中(除以2时取模0)。如果时间戳是奇数,它将三个字符串放入一个表中。现在您无法判断您的for循环需要运行多少次。也许一次或三次,但无法确定。解决方案是将开始计数设置为1,将结束计数设置为表格的长度(#mytable是用于确定表格长度的内置快捷方式)。可能需要多次运行脚本才能看到这两个结果,但最终,你会得到这样的结果:如果您阅读了我关于表迭代的文章,那么您已经熟悉了Lua中最常见的for循环之一。这使用pairs或ipairs函数迭代表:mytable={"zombie","Halloween","apocalypse"}fori,vinipairs(mytable)doprint(i..":"v)endpairs和ipairs函数“解压”表并将值转储到您提供的变量中。在此示例中,我使用i作为索引,使用v作为值,但变量名称无关紧要。$lua./for.lua1:zombie2:Halloween3:apocalypseforLoopsfor循环结构在编程中很常见,由于table和pairs函数的频繁使用,在Lua中也很常见。了解for循环结构和控制它时的选项意味着您可以就如何在Lua中处理数据做出明智的决定。