对于Lua上的Loop

时间:2011-09-30 21:24:11

标签: loops for-loop lua

我的任务是如何进行for循环。我已经用数字来解决这个问题,但无法用名字来解决这个问题。我想创建一个运行在名称列表中的for循环。以下是我到目前为止:

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

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

3 个答案:

答案 0 :(得分:173)

你的问题很简单:

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

此代码首先声明一个名为names的全局变量。然后,你开始一个for循环。 for循环声明了一个恰好被称为names local 变量;以前使用names定义变量的事实完全无关紧要。在for循环中使用names将引用 local ,而不是全局

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有多大或多小,这都会有效。

但是,有一种更方便的方法来迭代一系列项目:

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

ipairs是一个Lua标准函数,它遍历列表。这种样式的for循环(循环迭代器)使用这种迭代器函数。 i值是数组中条目的索引。 name值是该索引处的值。所以它基本上为你做了很多琐碎的工作。

答案 1 :(得分:15)

通过在线阅读(tables tutorial),似乎表格就像数组一样,所以你正在寻找:

<强> WAY1

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

<强> Way2

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

Way1 使用表index/key,在您的表names上,每个元素都有一个从1开始的键,例如:

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

所以你只需要让i从1到3。

Way2 上,您可以指定要运行的表格,并为其键和值指定变量,例如:

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

打印以下内容:

1   John
2   Joe
myKey   myValue

答案 2 :(得分:0)

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

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