Cours

Lua Leçon 3

Les tables

La seule structure de données de Lua, qui sert à la fois de liste et de dictionnaire.

20 min

À la fin de cette leçon, tu sauras

  • Créer une table utilisée comme liste
  • Créer une table avec des clés (un dictionnaire)
  • Parcourir une table avec ipairs et pairs

Une table comme liste

En Lua, tout se range dans des tables, écrites entre accolades.

local armes = { "pistolet", "fusil", "couteau" }

print(armes[1])     -- pistolet
print(#armes)       -- 3
table.insert(armes, "grenade")

Attention : contrairement à la plupart des langages, les listes Lua commencent à l'indice 1, pas 0. Le # donne la longueur.

Une table avec des clés

local joueur = {
    pseudo = "Skap",
    niveau = 12,
    argent = 2500,
}

print(joueur.pseudo)        -- Skap
print(joueur["niveau"])     -- 12
joueur.argent = joueur.argent + 500
joueur.metier = "pompier"   -- ajoute une nouvelle clé

On lit une valeur avec table.cle ou table["cle"]. Une clé qui n'existe pas renvoie nil.

Parcourir une table

for i, arme in ipairs(armes) do
    print(i .. " : " .. arme)
end

for cle, valeur in pairs(joueur) do
    print(cle .. " = " .. tostring(valeur))
end
  • ipairs parcourt une liste dans l'ordre, de 1 jusqu'au dernier élément ;
  • pairs parcourt toutes les clés, dans un ordre qui n'est pas garanti ;
  • tostring transforme n'importe quelle valeur en texte.

À toi de jouer

Crée une table locale vehicule avec trois clés : marque (texte), vitesse (nombre) et places (nombre). Puis parcours-la avec pairs et affiche chaque clé et sa valeur.

main.lua
  • La table locale vehicule est créée
  • Elle a une clé marque avec un texte
  • Elle a des clés vitesse et places avec des nombres
  • Une boucle for … in pairs(vehicule) la parcourt
  • Chaque clé est affichée avec print
Bloqué ? Voir une solution
local vehicule = {
    marque = "Peugeot",
    vitesse = 180,
    places = 5,
}

for cle, valeur in pairs(vehicule) do
    print(cle .. " : " .. tostring(valeur))
end

Quiz

1Avec local t = { "a", "b", "c" }, que vaut t[1] ?
2Que donne #t pour cette même table ?
3Quelle fonction pour parcourir toutes les clés d'une table ?