在Lua中循环遍历数组值

32

我有一个变量如下

local armies = {
    [1] = "ARMY_1",
    [2] = "ARMY_3",
    [3] = "ARMY_6",
    [4] = "ARMY_7",
}

现在我想要对每个值执行一个动作。最好的方法是循环遍历这些值。我在网上找到的典型做法是:

for i, armyName in pairs(armies) do
    doStuffWithArmyName(armyName)
end

我不喜欢这样做,因为它会导致一个未使用的变量i。下面的方法避免了这种情况,也是我目前正在使用的方法:

for i in pairs(armies) do
    doStuffWithArmyName(armies[i])
end

然而,这仍然不如我所希望的那样可读和简单,因为这是在键上进行迭代,然后使用键获取值(相当于命令式语言)。我对两种方法都有一个好处,那就是不需要pairs。我能够控制正在循环遍历的值,并且我希望它能尽可能容易地进行循环遍历。

如果我只关心值,有更好的循环方式吗?有没有办法解决我列出的问题?

我正在使用Lua 5.0(并且我对这种语言还很陌生)


2
无论您如何操作(即使使用自定义迭代器),索引都需要被保存在某个地方,这并不是因为需要它,而是由于迭代器需要。 - warspyking
1个回答

66

在数组上迭代的惯用方法是:

for _, armyName in ipairs(armies) do
    doStuffWithArmyName(armyName)
end

请注意:
  1. 对于数组,请使用ipairs而不是pairs
  2. 如果键不是您感兴趣的,请使用_作为占位符。

如果出于某种原因,您仍然担心_占位符,请自己创建迭代器。 《Lua编程》提供了示例:

function values(t)
  local i = 0
  return function() i = i + 1; return t[i] end
end

使用方法:

for v in values(armies) do
  print(v)
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接