web-dev-qa-db-fra.com

Boucle sur les valeurs de tableau dans Lua

J'ai une variable comme suit

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

Maintenant, je veux faire une action pour chaque valeur. Quelle est la meilleure façon de parcourir les valeurs? La chose typique que je trouve sur Internet est la suivante:

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

Je n'aime pas cela car il en résulte une variable inutilisée i. L'approche suivante évite cela et c'est ce que j'utilise actuellement:

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

Cependant, ce n'est toujours pas aussi lisible et simple que je le souhaiterais, car cela itère sur les clés et obtient ensuite la valeur en utilisant la clé (plutôt impérativement). Un autre avantage que j'ai avec les deux approches est que pairs est nécessaire. La valeur bouclée ici est celle sur laquelle j'ai le contrôle, et je préférerais qu'elle puisse être bouclée aussi facilement que possible.

Existe-t-il une meilleure façon de faire une telle boucle si je ne me soucie que des valeurs? Existe-t-il un moyen de répondre aux préoccupations que j'ai énumérées?

J'utilise Lua 5.0 (et je suis assez nouveau dans la langue)

11
Jeroen De Dauw

La manière idiomatique d'itérer sur un tableau est la suivante:

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

Notez que:

  1. Utilisez ipairs sur pairs pour les tableaux
  2. Si la clé ne vous intéresse pas, utilisez _ comme espace réservé.

Si, pour une raison quelconque, ce _ l'espace réservé vous concerne toujours, créez votre propre itérateur. Programmation en Lua le fournit comme exemple:

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

Usage:

for v in values(armies) do
  print(v)
end
27
Yu Hao