Lua - Tables

introduction

Les tableaux sont la seule structure de données disponible dans Lua qui nous aide à créer différents types tels que des tableaux et des dictionnaires. Lua utilise des tableaux associatifs et qui peuvent être indexés non seulement avec des nombres mais aussi avec des chaînes sauf nil. Les tables n'ont pas de taille fixe et peuvent évoluer en fonction de nos besoins.

Lua utilise des tables dans toutes les représentations, y compris la représentation des packages. Lorsque nous accédons à une méthode string.format, cela signifie que nous accédons à la fonction format disponible dans le package string.

Représentation et utilisation

Les tableaux sont appelés objets et ne sont ni des valeurs ni des variables. Lua utilise une expression de constructeur {} pour créer une table vide. Il faut savoir qu'il n'y a pas de relation fixe entre une variable qui contient la référence de la table et la table elle-même.

--sample table initialization
mytable = {}

--simple table value assignment
mytable[1]= "Lua"

--removing reference
mytable = nil

-- lua garbage collection will take care of releasing memory

Quand on a une table a avec un ensemble d'éléments et si nous l'attribuons à b, tous les deux a et bse réfèrent à la même mémoire. Aucune mémoire séparée n'est allouée séparément pour b. Quand a est défini sur nil, la table sera toujours accessible à b. Lorsqu'il n'y a pas de référence à une table, le garbage collection dans Lua s'occupe du processus de nettoyage pour que ces mémoires non référencées soient réutilisées à nouveau.

Un exemple est présenté ci-dessous pour expliquer les caractéristiques des tableaux mentionnées ci-dessus.

-- Simple empty table
mytable = {}
print("Type of mytable is ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "Tutorial"

print("mytable Element at index 1 is ", mytable[1])
print("mytable Element at index wow is ", mytable["wow"])

-- alternatetable and mytable refers to same table
alternatetable = mytable

print("alternatetable Element at index 1 is ", alternatetable[1])
print("alternatetable Element at index wow is ", alternatetable["wow"])

alternatetable["wow"] = "I changed it"

print("mytable Element at index wow is ", mytable["wow"])

-- only variable released and and not table
alternatetable = nil
print("alternatetable is ", alternatetable)

-- mytable is still accessible
print("mytable Element at index wow is ", mytable["wow"])

mytable = nil
print("mytable is ", mytable)

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante -

Type of mytable is 	table
mytable Element at index 1 is 	Lua
mytable Element at index wow is 	Tutorial
alternatetable Element at index 1 is 	Lua
alternatetable Element at index wow is 	Tutorial
mytable Element at index wow is 	I changed it
alternatetable is 	nil
mytable Element at index wow is 	I changed it
mytable is 	nil

Manipulation de table

Il existe des fonctions intégrées pour la manipulation de table et elles sont répertoriées dans le tableau suivant.

N ° Sr. Méthode et objectif
1

table.concat (table [, sep [, i [, j]]])

Concatène les chaînes dans les tables en fonction des paramètres donnés. Voir l'exemple pour plus de détails.

2

table.insert (table, [pos,] value)

Insère une valeur dans la table à la position spécifiée.

3

table.maxn (table)

Renvoie le plus grand index numérique.

4

table.remove (table [, pos])

Supprime la valeur de la table.

5

table.sort (table [, comp])

Trie la table en fonction de l'argument de comparateur facultatif.

Voyons quelques exemples des fonctions ci-dessus.

Concaténation de table

Nous pouvons utiliser la fonction concat pour concaténer deux tables comme indiqué ci-dessous -

fruits = {"banana","orange","apple"}

-- returns concatenated string of table
print("Concatenated string ",table.concat(fruits))

--concatenate with a character
print("Concatenated string ",table.concat(fruits,", "))

--concatenate fruits based on index
print("Concatenated string ",table.concat(fruits,", ", 2,3))

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante -

Concatenated string 	bananaorangeapple
Concatenated string 	banana, orange, apple
Concatenated string 	orange, apple

Insérer et supprimer

L'insertion et la suppression d'éléments dans les tableaux sont les plus courantes dans la manipulation de tableaux. Cela est expliqué ci-dessous.

fruits = {"banana","orange","apple"}

-- insert a fruit at the end
table.insert(fruits,"mango")
print("Fruit at index 4 is ",fruits[4])

--insert fruit at index 2
table.insert(fruits,2,"grapes")
print("Fruit at index 2 is ",fruits[2])

print("The maximum elements in table is",table.maxn(fruits))

print("The last element is",fruits[5])

table.remove(fruits)
print("The previous last element is",fruits[5])

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante -

Fruit at index 4 is 	mango
Fruit at index 2 is 	grapes
The maximum elements in table is	5
The last element is	mango
The previous last element is	nil

Tri des tableaux

Nous avons souvent besoin de trier une table dans un ordre particulier. Les fonctions de tri trient les éléments d'un tableau par ordre alphabétique. Un exemple pour cela est présenté ci-dessous.

fruits = {"banana","orange","apple","grapes"}

for k,v in ipairs(fruits) do
   print(k,v)
end

table.sort(fruits)
print("sorted table")

for k,v in ipairs(fruits) do
   print(k,v)
end

Lorsque nous exécutons le programme ci-dessus, nous obtiendrons la sortie suivante -

1	banana
2	orange
3	apple
4	grapes
sorted table
1	apple
2	banana
3	grapes
4	orange