在Lua中的for循环

我的作业是如何使用 for 循环。我已经搞清楚了数字方面,但是在名称方面搞不清楚。我想创建一个 for 循环,以遍历名称列表。以下是我目前的代码:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

我尝试了其他一些方法,但它总是不起作用,终端只列出 1、2、3... 我做错了什么?

原文链接 https://stackoverflow.com/questions/7616260

点赞
stackoverflow用户935898
stackoverflow用户935898

通过在线阅读([表教程](http://lua-users.org/wiki/TablesTutorial)),似乎表的行为就像数组一样,因此您要寻找:

方法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

方式1使用表索引/键,在您的表names上,每个元素都有一个从1开始的键,例如:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John

因此,您只需使i从1到3。

相反,对于方法2,您指定要运行的表并为其键和值分配变量,例如:

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

打印以下内容:

1   John
2   Joe
myKey   myValue
2011-09-30 21:52:18
stackoverflow用户734069
stackoverflow用户734069

你的问题很简单:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

这段代码首先声明了一个名为 names 的全局变量。 然后,您开始一个 for 循环。 for 循环声明了一个 本地 变量,该变量名恰好也叫作 names;先前用 names 定义过变量的事实完全无关紧要。在 for 循环中使用 names 的任何使用都将引用 本地 的变量,而不是全局的变量。

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 循环。您使用计数变量访问表中的元素。

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

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 变得多大或多小,这将始终起作用。

但是,还有一种更方便的迭代数组中条目的方法:

names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
  print (name)
end

ipairs 是 Lua 的标准函数,用于迭代列表。这种 for 循环方式,迭代 for 循环,使用此类迭代器函数。i 值是数组条目的索引。name 值是该索引处的值。因此它基本上为您做了很多繁重的工作。

2011-10-01 00:39:50
stackoverflow用户5735195
stackoverflow用户5735195
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

你正在删除你的表并替换它为一个整数 你没有从表中取出一个值

尝试:

names = {'John','Joe','Steve'}
for i = 1,3 do
    print(names[i])
end
2016-01-01 19:11:32