“对于具有键值对的lua表中的每个”循环

时间:2012-10-26 06:04:24

标签: lua lua-5.2

假设我有一个像这样定义的表:

myTable = { myValue = nil, myOtherValue = nil}

我将如何在这样的每个时尚循环中迭代它?

  for key,value in myTable do --pseudocode
        value = "foobar"
  end

另外,如果有帮助,我并不关心关键,只关心价值。

1 个答案:

答案 0 :(得分:41)

没有值的键(即:nil)不存在。就Lua而言,myTable是一个表。

你可以遍历一个空表,但这不会有用。

此外:

for key,value in myTable do --pseudocode
    value = "foobar"
end

这种“伪代码”毫无意义。您不能通过修改局部变量的内容来修改表; Lua不这样做。您无法获得对表条目的引用;你只能从表格中获得

如果要修改表的内容,则必须实际修改。例如:

for key,value in pairs(myTable) do --actualcode
    myTable[key] = "foobar"
end

请注意myTable的使用。您不能在不使用表本身的情况下修改表。无论是通过myTable访问的表还是通过其他变量,您都可以存储对表的引用。

通常,在迭代表时修改表可能会导致问题。然而,Lua说:

  

如果在遍历期间将任何值分配给表中不存在的字段,则next的行为是未定义的。但是,您可以修改现有字段。特别是,您可以清除现有字段。

因此修改已存在的字段的值是完全有效的。 key显然已经存在于表中,因此您可以对其进行修改。您甚至可以毫无问题地将其设置为nil

Lua中的变量只不过是价值观的持有者。表包含值; myTable[key]返回一个值。您可以将该值存储在变量中,但更改变量将更改myTable[key]的值。由于表是通过引用存储的,因此您可以在一个变量中更改表的内容,并在另一个变量中查看更改,但这只是表的内容,而不是表本身。