Loops Lua上的For循环

Loops Lua上的For循环,loops,for-loop,lua,Loops,For Loop,Lua,我的作业是如何做for循环。我已经用数字计算出来了,但不能用名字计算出来。我想创建一个for循环,它沿着名称列表运行。以下是我目前的情况: names = {'John', 'Joe', 'Steve'} for names = 1, 3 do print (names) end 我试过一些其他的方法,但它就是不起作用,终端总是只列出1,2,3。。。我做错了什么?通过联机阅读()可以看出,表的行为类似于数组,因此您需要查找: 方式1 names = {'John', 'Joe', 'Ste

我的作业是如何做for循环。我已经用数字计算出来了,但不能用名字计算出来。我想创建一个for循环,它沿着名称列表运行。以下是我目前的情况:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end
我试过一些其他的方法,但它就是不起作用,终端总是只列出1,2,3。。。我做错了什么?

通过联机阅读()可以看出,表的行为类似于数组,因此您需要查找:

方式1

names = {'John', 'Joe', 'Steve'}
for i = 1,3 do print( names[i] ) end
方式2

names = {'John', 'Joe', 'Steve'}
for k,v in pairs(names) do print(v) end

Way1使用表
索引/键
,在表
名称
上,每个元素都有一个从1开始的键,例如:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John
names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end
所以你只要把
i
从1变为3

Way2上,指定要运行的表,并为其键和值分配变量,例如:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John
names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end
打印以下内容:

1   John
2   Joe
myKey   myValue

你的问题很简单:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end
这段代码首先声明一个名为
names
的全局变量。然后,开始一个for循环。for循环声明了一个局部变量,该变量恰好也被称为
names
;一个变量以前是用
名称定义的这一事实与此完全无关。在for循环中使用的
名称
都是指本地名称,而不是全局名称

for循环表示将使用
names=1
调用循环的内部部分,然后是
names=2
,最后是
names=3
。for循环声明一个从第一个数字到最后一个数字计数的计数器,它将为每个计数的值调用一次内部代码

你真正想要的是这样的东西:

names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
  print (names[nameCount])
end
[]语法是访问Lua表成员的方式。Lua表将“键”映射到“值”。数组会自动创建整数类型的键,该键会增加。因此表中与“Joe”相关联的键是2(Lua索引总是从1开始)

因此,您需要一个从1到3计数的for循环,您可以得到。您可以使用count变量从表中访问元素

然而,这有一个缺陷。如果从列表中删除其中一个元素,会发生什么情况

names = {'John', 'Joe'}
for nameCount = 1, 3 do
  print (names[nameCount])
end
现在,我们得到了
John-Joe-nil
,因为尝试从不存在的表中访问值会导致
nil
。为了防止出现这种情况,我们需要从1开始计算表的长度:

names = {'John', 'Joe'}
for nameCount = 1, #names do
  print (names[nameCount])
end
#
是长度运算符。它处理表和字符串,返回其中一个的长度。现在,无论名称有多大或多小,这都将始终有效

但是,有一种更方便的方法可以遍历项目数组:

names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
  print (name)
end
ipairs
是一个迭代列表的Lua标准函数。这种类型的
for
loop,即循环迭代器,使用这种迭代器函数。
i
值是数组中项的索引。
name
值是该索引处的值。所以它基本上为你做了很多繁重的工作

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end
  • 您正在删除表并将其替换为int
  • 您没有从表中提取值
  • 尝试:


    您阅读了表格教程,但没有看到
    ipairs
    ?或者说,
    pairs
    不必按任何特定顺序返回键值的部分?起初我实际上使用了
    ipairs
    ,但当我添加了
    myKey=“myValue”
    示例,该示例对于非数字键需要
    pairs
    时,我决定也更改
    pairs
    的其余部分。很抱歉,如果我忽略了pairs不能保证顺序,但我将链接保留在那里让他阅读。因此,对于ipairs()在其他语言中作为foreach()工作的great answer,我只想补充一点,在最后一个示例中,当var未使用时,使用
    \uu
    是相当习惯的。e、 g.
    names={'John'、'Joe'、'Steve'}对于u,ipairs中的name(name)do print(name)end
    downvoting:请提供一个有效的downvoting理由。尽管我认为答案有误导性,因为在
    for
    范围中声明的
    名称
    (整数计数器)引入了一个局部变量,该局部变量隐藏了在全局范围中声明的
    名称
    (表数组)。