在 Lua 中循环数组值

我有一个变量如下

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(并且对这种语言非常新)。

点赞
用户1009479
用户1009479

迭代数组的惯用方法是:

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
2016-10-12 06:26:35