108 votes

Pour Loop on Lua

Hey, je suis nouvelle marque pour le monde de codage et suis en train d'apprendre le Lua. Mon affectation à ce point, c'est comment faire une boucle for. J'ai pensé à elle en termes de chiffres, mais ne peut pas le comprendre en termes de noms. Je voudrais créer une boucle for qui parcourt une liste de noms. Voici ce que j'ai à ce jour:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

J'ai essayé quelques autres choses, mais ça ne fonctionne pas, le terminal toujours des listes 1, 2, 3... quelqu'un Peut-il me dire ce que je fais de mal?

246voto

Nicol Bolas Points 133791

Votre problème est simple:

names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
  print (names)
end

Ce code déclare une variable globale appelée names. Ensuite, vous démarrez une boucle for. Pour la boucle déclare un local variable qui arrive juste à être appelés names ; le fait qu'une variable a déjà été défini avec names est totalement hors de propos. Toute utilisation de l' names à l'intérieur de la boucle for va se référer à la locale , et non global.

La boucle for est dit que la partie intérieure de la boucle seront appelés names = 1, alors names = 2, et, enfin, names = 3. Pour la boucle déclare un compteur qui compte à partir du premier numéro de la dernière, et il va appeler l'intérieur du code une fois pour chaque valeur, il compte.

Ce que tu voulais, c'était quelque chose comme ceci:

names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
  print (names[nameCount])
end

[] La syntaxe est la façon dont vous accédez à des membres d'une table Lua. Lua tables de la carte "clés" de "valeurs". Votre tableau crée automatiquement des clés de type entier, qui augmentent. Donc, la clé associée à "Joe" dans le tableau 2 (Lua indices commencent toujours à 1).

Par conséquent, vous avez besoin d'une boucle for qui compte de 1 à 3, qui vous obtenez. Vous utilisez la variable nombre d'accéder à l'élément de la table.

Cependant, cela a une faille. Qu'advient-il si vous supprimez l'un des éléments de la liste?

names = {'John', 'Joe'}
for nameCount = 1, 3 do
  print (names[nameCount])
end

Maintenant, nous obtenons John Joe nil, en raison de la tentative d'accéder aux valeurs d'un tableau qui n'existe pas, les résultats en nil. Pour éviter cela, nous avons besoin de compter de 1 à la longueur de la table:

names = {'John', 'Joe'}
for nameCount = 1, #names do
  print (names[nameCount])
end

L' # est la longueur de l'opérateur. Il fonctionne sur les tables et les chaînes, le retour de la longueur de soit. Maintenant, peu importe comment grand ou petit names , ce le sera toujours.

Cependant, il y a un moyen plus pratique pour parcourir un tableau d'éléments:

names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
  print (name)
end

ipairs Lua est un standard de la fonction qui effectue une itération sur une liste. Ce style de for boucle, la variable d'itération de la boucle, utilise ce type de fonction d'itérateur. L' i de la valeur est l'indice de l'entrée dans le tableau. L' name de la valeur est la valeur à l'index. Donc, fondamentalement, ça fait beaucoup de gros du travail pour vous.

21voto

derp Points 1627

Par la lecture en ligne (tables de tutoriel), il semble tables se comportent comme des tableaux de sorte que vous cherchez:

Way1

names = {'John', 'Joe', 'Steve'}
for i = 1,3 do print( names[i] ) end

Way2

names = {'John', 'Joe', 'Steve'}
for k,v in pairs(names) do print(v) end

Way1 utilise la table index/key , sur votre table names chaque élément a une clé à partir de 1, par exemple:

names = {'John', 'Joe', 'Steve'}
print( names[1] ) -- prints John

Donc, vous venez de faire i aller de 1 à 3.

Sur Way2 au lieu de cela, vous indiquer à quelle table vous souhaitez exécuter et affecter une variable de sa clé et de la valeur, par exemple:

names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end

imprime le texte suivant:

1   John
2   Joe
myKey   myValue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X