Comment itérer à travers la table dans Lua?
donc, j'ai une table quelque chose comme ça:
arr =
{
apples = { 'a', "red", 5 },
oranges = { 'o', "orange", 12 },
pears = { 'p', "green", 7 }
}
il ne semble pas qu'il soit possible d'y accéder à partir de leur index, et les valeurs elles-mêmes sont des tables, donc j'ai juste fait la première valeur de la table imbriquée l'index de celui-ci, il ressemble maintenant à ceci:
arr =
{
apples = { 0, 'a', "red", 5 },
oranges = { 1, 'o', "orange", 12 },
pears = { 2, 'p', "green", 7 }
}
donc, maintenant chaque fois que j'utilise une de ces tables, je sais ce qu'est l'index, mais je ne peux toujours pas accéder à la table en utilisant l'index, donc j'ai commencé à écrire une fonction qui fait des boucles à travers toutes les tables., et vérifiez les index jusqu'à ce qu'il trouve le bon. Puis j'ai réalisé... Comment puis-je les passer en boucle si Je ne peux pas déjà les référencer par leur index? Alors, maintenant, je suis coincé. Je veux vraiment pouvoir taper arr.pommes vs arr[1] la plupart du temps, mais bien sûr, il est nécessaire de faire les deux à la fois.
2 réponses
pour itérer toutes les paires de valeurs-clés d'une table, vous pouvez utiliser pairs
:
for k, v in pairs(arr) do
print(k, v[1], v[2], v[3])
end
sorties:
pears 2 p green
apples 0 a red
oranges 1 o orange
Modifier: notez que Lua ne garantit aucun ordre d'itération pour la partie associative de la table. Si vous voulez accéder aux éléments dans un ordre spécifique, récupérez les clés de arr
et de tri. Ensuite, accédez à arr
par le biais de la triés clés:
local ordered_keys = {}
for k in pairs(arr) do
table.insert(ordered_keys, k)
end
table.sort(ordered_keys)
for i = 1, #ordered_keys do
local k, v = ordered_keys[i], arr[ ordered_keys[i] ]
print(k, v[1], v[2], v[3])
end
sorties:
apples a red 5
oranges o orange 12
pears p green 7
si vous voulez renvoyer à une table emboîtée par plusieurs touches, vous pouvez simplement les assigner à des touches séparées. Les tableaux ne sont pas dupliqués et font toujours référence aux mêmes valeurs.
arr = {}
apples = {'a', "red", 5 }
arr.apples = apples
arr[1] = apples
ce bloc de code vous permet d'itérer toutes les paires de valeurs clés dans une table (http://lua-users.org/wiki/TablesTutorial):
for k,v in pairs(t) do
print(k,v)
end