FANDOM


Les tableaux (ou collections) sont des variables qui peuvent contenir plusieurs valeurs. Certains langages ont plus d'une dizaine de type de tableaux différents (listes, dictionnaires, hashtables, stacks, queues, ...), chacun destinés à un usage particulier. Le Lua fait dans la simplicité en ayant un seul type de tableau justement appelé table (tableaux en anglais).

Les tableaux en Lua n'en sont pas moins très flexibles et aptes à servir en toutes occasions.

Avant de continuer, je vais juste vous demander de copier/coller ce bout de code en haut de votre script, il va permettre d'afficher facilement le contenu d'un tableau :

function tprint(t)    
   for key,value in pairs(t) do
       print(key, value)
   end
end

C'est une fonction, vous l'utiliserez comme print() en mettant le nom de votre tableau entre les parenthèses. Exemple :

tableau = { "une valeur", 20, false }
tprint(tableau)

-- affiche :
-- 1?une valeur
-- 2?20
-- 3?false

Notion de paires clé/valeurModifier

Les tableaux stockent leurs informations sous formes de paires clé/valeur où chaque valeur -qui n'est pas forcément unique- est associée à une clé -qui elle, est unique-.

Les clés peuvent être de n'importe quel type (nombre, string, booléen,...) mais pour des raisons de praticité vous rencontrerez quasiment toujours des clés qui sont des nombres entiers positifs ou des string.

Les valeurs elles aussi peuvent être de n'importe quel type.

Généralités sur la création, l'écriture et la lecture dans un tableauModifier

Un tableau est donc représenté comme une liste de valeurs séparées par des virgules, le tout entouré de deux accolades.

A la création un tableau peut être vide ou pré-remplis avec valeurs, comme montré ci-dessous.

t = {} -- création d'un tableau vide
t = { "un", "deux", "trois" } -- création d'un tableau avec trois valeurs

Il n'est pas obligatoire de spécifier la clé lorsque vous écrivez une valeur. Dans ce cas la clé sera implicitement le nombre entier strictement positif (c'est à dire 1 ou plus, mais pas zéro) le plus petit possible.


Les clés seront toujours écrites entre crochet, à l'exception des string sans espace, qui peuvent être écrits sans crochet ni guillemet (ce n'est pas obligatoire, c'est juste un possibilité).


Comme lorsque l'on déclare une variable, un signe égal sépare la clé de sa valeur :

t = {
    "une valeur avec une clé numérique par défaut", -- la clé de cette valeur est 1
    [2] = "une valeur avec une clé numérique spécifiée",
    ["tr oi s"] = "une valeur avec un string en tant que clé",
    quatre = "une autre valeur avec un string en tant que clé"
}

La même syntaxe est utilisée lorsque le tableau existe déjà :

t[5] = "cinq"
t["s i x"] = "six"
t.sept = "sept"

Notez que cette manière d'écrire dans un tableau écrase (remplace) la valeur qui serait éventuellement déjà associée à cette clé.

Il est aussi possible d'insérer une valeur sans spécifier la clé ou sans écraser d'autre valeur grâce à la fonction table.insert(), voir ci-dessous dans le paragraphe "Tableaux numérotés".

Lire un tableau utilise a nouveau la même syntaxe :

print( t[1] ) -- affiche 'une valeur avec une clé numérique par défaut'
print( t["tr oi s"] ) -- 'trois'
print( t.sept ) -- 'sept'
print( t["sept"] ) -- 'sept'
print( t['sept'] ) -- 'sept'

Supprimer une valeur se fait simplement en donnant la valeur nil à la clé souhaitée :

print( t.quatre ) -- "une autre valeur avec un string en tant que clé"
t.quatre = nil
print( t.quatre ) -- nil
print( t.clequiexistepas ) -- nil

Tableaux numérotésModifier

Ce sont les tableaux dont les clés sont exclusivement des nombres entier strictement positifs (1 ou plus). Il sont utilisés comme simple liste de valeurs, lorsque la clé n'a pas d'importance. Si ils disposent de leur propre paragraphe, c'est qu'ils sont un peu particulier et disposent de fonctions dédiées.

t = { "première valeur", "deuxième valeur" }
tprint(t) 
-- affiche
-- 1?première valeur
-- 2?deuxième valeur

Pour ajouter des valeurs à la fin du tableau, il faut utiliser la fonction table.insert(tableau, valeur)

table.insert(t, "troisième valeur")
table.insert(t, "quatrième valeur")
tprint(t) 
-- affiche
-- 1?première valeur
-- 2?deuxième valeur
-- 3?troisième valeur
-- 4?quatrième valeur

Cette fonction permet également d'ajouter une valeur à une position précise, sans écraser la valeur qui y existe déjà. La fonction décale la position des valeurs dont l'index est supérieur ou égal à celui indiqué en incrémentant leur index (en les augmentant tous de 1).


Exemple :

-- insérons "cinq" à la position 2
table.insert(t, 2, "cinq")
tprint(t)
-- affiche
-- 1?première valeur
-- 2?cinq
-- 3?deuxième valeur
-- 4?troisième valeur
-- 5?quatrième valeur

Vous voyez que la valeur "cinq" est en deuxième position et que l'index des autre valeur (à part "première valeur") ont augmentés de 1 depuis la dernière fois où le contenu du tableau a été affiché.

Il est possible de la même manière de supprimer des valeurs avec la fonction table.remove(tableau) ou table.remove(tableau, position). Si la position n'est pas spécifiée, la fonction supprime la dernière valeur de la table et la retourne. Si la position est spécifié, la fonction supprime la valeur à la position spécifiée, la retourne et décale les valeurs dont l'index est supérieur en décrémentant l'index afin d'éviter un "trou" dans le tableau.

print( t[5] ) -- 'deuxième valeur'
print( tale.remove(t) ) -- 'deuxième valeur'
print( t[5] ) -- nil

print( t[2] ) -- 'cinq'
print( tale.remove(t, 2) ) -- 'cinq'
print( t[2] ) -- 'deuxième valeur'

tprint(t)
-- affiche
-- 1?première valeur
-- 2?deuxième valeur
-- 3?troisième valeur
-- 4?quatrième valeur

La taille d'un tableau numéroté peut être connu en faisant précéder son nom d'un croisillon ( # , Alt-Gr + 3).

t = {}
print( #t ) -- affiche 0
table.insert(t, "valeur")
print( #t ) -- affcihe 1

Parcourir un tableauModifier

La principale utilité des tableaux, notamment des tableaux numérotés est qu'il est possible de boucler dessus. C'est à dire qu'il est possible de parcourir (lire) avec une boucle toutes les clés et valeurs d'un tableau les unes après les autres sans forcément connaitre par avance ni ses clés ni sa taille.

Les boucles sont l'une des structures élémentaire des langages de programmation, et font justement l’objet du prochain tutoriel.

ConclusionModifier

Les tableaux sont des variables qui en contiennent d'autres sous forme de paires clé/valeur. Les clés seront pour ainsi dire toujours soit des nombres entiers positifs, soit des string.

-- Écrire dans un tableau
tableau = { "une valeur", [2] = 20, false }

table.insert(tableau, 40) -- ajout à la fin du tableau
table.insert(tableau, 1, 10) -- ajout à la position spécifiée, en décalant les autres valeurs

tableau[6] = "sixième valeur"
tableau[6] = "septième valeur" -- remplace la valeur associée à la clé '6'

tableau["une clé"] = {"un", "deux"}
tableau.vrai = true

-- Lire un tableau
print( tableau[1] ) -- affiche 10
print( tableau[2] ) -- affiche 'une valeur'
print( tableau[3] ) -- affiche false
print( tableau[4] ) -- affiche 40
print( tableau[5] ) -- affiche nil
print( tableau[6] ) -- "septième valeur"
print( tableau["une clé"] ) -- affiche quelque chose comme "table: 04E5EE98"
print( tableau["vrai"] ) -- true
print( tableau.vrai ) -- true
print( tableau[41256] ) -- nil

-- supprimer d'un tableau
tableau[3] = nil
tableau["vrai"] = nil

print( table.remove(tableau, 2) ) -- supprimer à la position spécifiée et décale les valeur restante, retourne la valeur supprimée : 'une valeur'
print( table.remove(tableau) ) -- supprime à la fin du tableau et retourne la valeur : 10

print( tableau[1] ) -- nil
print( tableau[2] ) -- nil
print( tableau[3] ) -- 40
print( tableau[4] ) -- nil
print( tableau[5] ) -- "septième valeur"
print( tableau[6] ) -- nil

print( tableau["une clé"] ) -- table: 04E5EE98
print( tableau["vrai"] ) -- nil
print( tableau.vrai ) -- nil
print( tableau[41256] ) -- nil

Interférence d'un bloqueur de publicité détectée !


Wikia est un site gratuit qui compte sur les revenus de la publicité. L'expérience des lecteurs utilisant des bloqueurs de publicité est différente

Wikia n'est pas accessible si vous avez fait d'autres modifications. Supprimez les règles personnalisées de votre bloqueur de publicité, et la page se chargera comme prévu.

Sur le réseau FANDOM

Wiki au hasard