Comment parcourir les tables dans Lua
Créez une structure qui facilite la recherche des données stockées.
Dans le langage de programmation Lua, un tableau est appelé une table. Une table est utilisée dans Lua pour stocker des données. Si vous stockez beaucoup de données de manière structurée, il est utile de connaître vos options pour récupérer ces données lorsque vous en avez besoin.
Créer une table dans Lua
Pour créer une table dans Lua, vous instanciez la table avec un nom arbitraire :
mytable = {}
Il existe différentes manières de structurer vos données dans un tableau. Vous pouvez le remplir avec des valeurs, en créant essentiellement une liste (appelée liste dans certaines langues) :
mytable = { 'zombie', 'apocalypse' }
Vous pouvez également créer un tableau associé (appelé carte ou dictionnaire dans certaines langues). Vous pouvez ajouter des clés arbitraires au tableau en utilisant la notation par points. Vous pouvez également ajouter une valeur à cette clé de la même manière que vous ajoutez une valeur à une variable :
myarray = {}
myarray.baz = 'happy'
myarray.qux = 'halloween'
Vous pouvez ajouter une vérification avec la fonction assert()
:
assert(myarray.baz == 'happy', 'unexpected value in myarray.baz')
assert(myarray.qux == 'halloween', 'unexpected value in myarray.qux')
Vous disposez maintenant de deux tables : une mytable
de style liste et une myarray
de style tableau associatif.
Itérer sur une table avec des paires
La fonction pairs()
de Lua extrait les paires clé et valeur d'une table.
print('pairs of myarray:')
for k,v in pairs(myarray) do
print(k,v)
end
Voici le résultat :
pairs of myarray:
baz happy
qux halloween
S'il n'y a pas de clés dans une table, Lua utilise un index. Par exemple, la table mytable
contient les valeurs zombie
et apocalypse
. Il ne contient aucune clé, mais Lua peut improviser :
print('pairs of mytable:')
for k,v in pairs(mytable) do
print(k,v)
end
Voici le résultat :
1 zombie
2 apocalypse
Itérer sur une table avec des ipairs
Pour tenir compte du fait que les tables sans clés sont courantes, Lua fournit également la fonction ipairs
. Cette fonction extrait l'index et la valeur :
print('ipairs of mytable:')
for i,v in ipairs(mytable) do
print(i,v)
end
La sortie est, dans ce cas, la même que la sortie des paires
:
1 zombie
2 apocalypse
Cependant, observez ce qui se passe lorsque vous ajoutez une paire clé/valeur à mytable
:
mytable.surprise = 'this value has a key'
print('ipairs of mytable:')
for i,v in ipairs(mytable) do
print(i,v)
end
Lua ignore la clé et la valeur car ipairs
récupère uniquement les entrées indexées :
1 zombie
2 apocalypse
La paire clé-valeur a cependant été stockée dans la table :
print('pairs of mytable:')
for k,v in ipairs(mytable) do
print(k,v)
end
Le résultat:
1 zombie
2 apocalypse
surprise this value has a key
Récupération de valeurs arbitraires
Vous n'avez pas besoin de parcourir une table pour en extraire des données. Vous pouvez appeler des données arbitraires par index ou par clé :
print('call by index:')
print(mytable[2])
print(mytable[1])
print(myarray[2])
print(myarray[1])
print('call by key:')
print(myarray['qux'])
print(myarray['baz'])
print(mytable['surprise'])
Le résultat:
call by index:
apocalypse
zombie
nil
nil
call by key:
halloween
happy
this value has a key
Structures de données
Parfois, utiliser une table Lua a beaucoup plus de sens que d'essayer de suivre des dizaines de variables individuelles. Une fois que vous avez compris comment structurer et récupérer des données dans un langage, vous êtes en mesure de générer des données complexes de manière organisée et sûre.