Mon devoir est de savoir comment faire une boucle for. Je l'ai compris en termes de chiffres mais je ne peux 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 jusqu'à présent:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
J'ai essayé d'autres solutions mais cela ne fonctionne tout simplement pas, le terminal ne mentionne toujours que 1, 2, 3 ... Qu'est-ce que je fais de travers?
Votre problème est simple:
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
Ce code déclare d'abord une variable globale appelée names
. Ensuite, vous commencez une boucle for. La boucle for déclare une variable locale qui s'appelle aussi names
; le fait qu'une variable ait déjà été définie avec names
n'a aucune pertinence. Toute utilisation de names
dans la boucle for fera référence à celle locale, pas à la transaction globale.
La boucle for indique que la partie interne de la boucle sera appelée avec names = 1
, puis names = 2
, et enfin names = 3
. La boucle for déclare un compteur qui compte du premier au dernier, et appelle le code interne une fois pour chaque valeur qu'il compte.
Ce que tu voulais réellement était quelque chose comme ça:
names = {'John', 'Joe', 'Steve'}
for nameCount = 1, 3 do
print (names[nameCount])
end
La syntaxe [] indique comment vous accédez aux membres d'une table Lua. Les tables Lua associent les "clés" aux "valeurs". Votre tableau crée automatiquement des clés de type entier, qui augmentent. La clé associée à "Joe" dans le tableau est donc 2 (les indices de Lua commencent toujours à 1).
Par conséquent, vous avez besoin d’une boucle for allant de 1 à 3. Vous utilisez la variable count pour accéder à l'élément depuis la table.
Cependant, cela a un défaut. Que se passe-t-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 avons John Joe nil
, parce que toute tentative d'accès à des valeurs d'une table inexistante a pour résultat nil
. Pour éviter cela, nous devons compter de 1 à la longueur du tableau:
names = {'John', 'Joe'}
for nameCount = 1, #names do
print (names[nameCount])
end
Le #
est l'opérateur de longueur. Cela fonctionne sur les tables et les chaînes, retournant la longueur de l'un ou de l'autre. Maintenant, peu importe la taille de names
, cela fonctionnera toujours.
Cependant, il existe un moyen plus pratique de parcourir un tableau d'éléments:
names = {'John', 'Joe', 'Steve'}
for i, name in ipairs(names) do
print (name)
end
ipairs
est une fonction standard de Lua qui parcourt une liste. Ce style de boucle for
, l'itérateur de boucle, utilise ce type de fonction d'itérateur. La valeur i
est l'index de l'entrée dans le tableau. La valeur name
est la valeur de cet index. Donc, il fait beaucoup de travail pour vous.
En lisant en ligne ( tutoriel sur les tables ), il semble que les tables se comportent comme des tableaux, de sorte que vous recherchez:
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 le tableau 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 ne faites que faire passer i
de 1 à 3.
Sur Way2 à la place, vous spécifiez la table que vous souhaitez exécuter et affectez une variable pour sa clé et sa valeur, par exemple:
names = {'John', 'Joe', myKey="myValue" }
for k,v in pairs(names) do print(k,v) end
imprime ce qui suit:
1 John
2 Joe
myKey myValue
names = {'John', 'Joe', 'Steve'}
for names = 1, 3 do
print (names)
end
Essayer:
names = {'John','Joe','Steve'}
for i = 1,3 do
print(names[i])
end