循环遍历Lua中的数组值

时间:2016-10-12 06:19:50

标签: loops lua readability

我有一个变量如下

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(对语言来说很新)

1 个答案:

答案 0 :(得分:16)

迭代数组的惯用方法是:

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

请注意:

  1. 使用ipairs而不是pairs数组
  2. 如果密钥不是您感兴趣的内容,请使用_作为占位符。
  3. 如果出于某种原因,_占位符仍然关注您,请创建自己的迭代器。 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