Tables

Les tableaux sont des ensembles d’entrées comportant des clés et des valeurs. Il s’agit de la seule structure de données agrégée fournie. Toutes les autres structures de données (tableaux, listes, ensembles, etc.) sont construites à partir de tables. Les clés et valeurs de table peuvent être de n’importe quel type, y compris d’autres tables. Les clés et les valeurs d’une même table peuvent être de différents types.

  • Constructeurs de tables
  • Utilisation de la table
  • Tables sous forme de tableaux
  • Tables sous forme d’enregistrements

Constructeurs de tables

Les constructeurs de tables vous permettent de spécifier une table avec des clés et des valeurs associées. La syntaxe est :

{[key1] = value1, [key2] = value2, …}

où les clés et les valeurs sont des expressions. Si les touches sont des chaînes qui ne sont pas des mots réservés, les crochets et les guillemets autour des touches peuvent être omis. Exemple :

{key1 = “value1”, key2 = “value2”, key3 = “value3”}

Une table vide est spécifiée simplement par {}.

Un constructeur de table peut être utilisé dans une affectation pour définir une variable pour faire référence à une table. Exemples :

local t1 = {} – set t1 to an empty table local t2 = {key1 = “value1”, key2 = “value2”, key3 = “value3”}

Notez que les tables elles-mêmes sont anonymes. Plusieurs variables peuvent faire référence au même tableau. Poursuivant l’exemple ci-dessus :

t3 local = t2 - t2 et t3 se réfèrent à la même table

Utilisation de la table

Comme vous vous y attendiez, vous pouvez utiliser des clés pour trouver des valeurs dans une table. La syntaxe est table [clé], où table est une référence de table (généralement une variable affectée à une table) et clé est une expression fournissant la clé. Si cela est utilisé dans une expression et que la clé existe dans la table, cela renvoie la valeur associée à la clé. Si la clé ne figure pas dans la table, cela renvoie zéro. Si cette variable est utilisée dans une affectation et que la clé n’existe pas dans la table, une nouvelle entrée est créée pour la clé et la valeur. Si la clé existe déjà dans la table, elle remplace la valeur de la clé par la nouvelle valeur. Exemples :

local t = {} – sets t to an empty table t[“k1”] = “v1” – creates an entry for key “k1” and value “v1” v1 = t[“k1”] – sets v1 to the value for key “k1” = “v1” t[“k1”] = “new_v1” – sets the value for key “k1” to “new_v1”

Tableau en tant que tableaux

Le tableau traditionnel peut être implémenté à l’aide d’une table avec des clés entières comme indices. Un tableau peut avoir n’importe quel indice, même négatif, mais la convention est de démarrer les tableaux à l’index 1 (et non à 0 comme c’est le cas avec des langages tels que C et Java). Il existe un constructeur de table spécial pour de tels tableaux :

{valeur1, valeur2, valeur3,…}

Les références aux tableaux sont alors des tableaux [index].

L’opérateur de longueur # renvoie le nombre d’éléments dans un tableau avec des indices consécutifs commençant à 1. Exemple :

local a = {“value1”, “value2”, “value3”} local length = #a – sets length to the length of array a = 3

Les tableaux peuvent être éparpillés, seuls les éléments définis étant alloués. Mais # ne peut pas être utilisé sur un tableau clairsemé avec des indices non consécutifs. Exemple :

local sparse_array = {} – set up an empty array sparse_array[1] = “value1” – add an element at index 1 sparse_array[99] = “value99” – add an element at index 99

Les tableaux multidimensionnels peuvent être configurés en tant que tables de tables. Par exemple, une matrice 3x3 peut être configurée par :

local m = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} local v22 = m[2][2] — définit v22 à 5

Tables en tant qu’enregistrements

Les enregistrements avec des champs peuvent être implémentés sous forme de tables avec des clés de nom de champ. Le formulaire de référence table.field peut être utilisé pour la table [“field”]. Exemples :

local person = {name = “John Smith”, phone = “777-777-7777”} local name = person.name – sets name to “John Smith”

Un tableau de tables peut être utilisé pour une séquence d’enregistrements. Exemple :

local people = { {name = “John Smith”, phone = “777-777-7777”}, {name = “Jane Doe”, phone = “888-888-8888”} … }

name = people [2] .name – définit le nom comme « Jane Doe »

Tables