Table Lua(tableau)


table est une structure de données en Lua qui nous aide à créer différents types de données, tels que des nombres, des dictionnaires, etc.

La table Lua utilise des tableaux associatifs. Vous pouvez utiliser n'importe quel type de valeur comme index du tableau, mais cette valeur ne peut pas être nulle.

La table Lua n'a pas de taille fixe et vous pouvez l'agrandir selon vos besoins.

Lua utilise également des tables pour résoudre des modules, des packages et des objets. Par exemple, string.format signifie utiliser « format » pour indexer la chaîne de la table.


Construction de table (table)

Le constructeur est une expression qui crée et initialise la table. Les tables sont un élément puissant unique à Lua. Le constructeur le plus simple est {}, qui crée une table vide. Vous pouvez initialiser le tableau directement :

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

Lorsque nous définissons les éléments de la table a, puis attribuons a à b, a et b pointent tous deux vers la même mémoire. si a est défini sur zéro , alors b peut également accéder aux éléments de la table. S'il n'y a aucune variable spécifiée pointant vers a, le mécanisme de garbage collection de Lua nettoiera la mémoire correspondante.

L'exemple suivant illustre la description ci-dessus :

-- 简单的 table
mytable = {}
print("mytable 的类型是 ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引为 1 的元素是 ", mytable[1])
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- alternatetable和mytable的是指同一个 table
alternatetable = mytable

print("alternatetable 索引为 1 的元素是 ", alternatetable[1])
print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])

alternatetable["wow"] = "修改后"

print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- 释放变量
alternatetable = nil
print("alternatetable 是 ", alternatetable)

-- mytable 仍然可以访问
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

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

Le résultat de l'exécution du code ci-dessus est :

mytable 的类型是 	table
mytable 索引为 1 的元素是 	Lua
mytable 索引为 wow 的元素是 	修改前
alternatetable 索引为 1 的元素是 	Lua
mytable 索引为 wow 的元素是 	修改前
mytable 索引为 wow 的元素是 	修改后
alternatetable 是 	nil
mytable 索引为 wow 的元素是 	修改后
mytable 是 	nil

Les opérations de table

sont répertoriées ci-dessous Méthodes couramment utilisées pour les opérations sur les tables :

< td>table.maxn (table)<🎜>Spécifie la plus grande valeur de clé parmi toutes les valeurs de clé positives dans le tableau s'il n'y a aucun élément avec une valeur de clé positive. , 0 est renvoyé. (Cette méthode n'existe plus après Lua5.2, cet article utilise une fonction personnalisée pour l'implémenter)<🎜> < td>4
Numéro de série Méthode et objectif
1table.concat (table [, sep [, start [, end]]]) :
序号方法 & 用途
1table.concat (table [, sep [, start [, end]]]):

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

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

在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

3table.maxn (table)

指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

4table.remove (table [, pos])

返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

5table.sort (table [, comp])

对给定的table进行升序排序。

concat est l'abréviation de concatenate (chain, connection). La fonction table.concat() répertorie tous les éléments de la position de début à la position de fin de la partie tableau de la table spécifiée dans le paramètre, et les éléments sont séparés par le séparateur spécifié (sep). <🎜>
2table.insert (table, [pos,] valeur) :<🎜>dans le tableau La partie du tableau spécifie la position (pos) pour insérer un élément dont la valeur est value. Le paramètre pos est facultatif et est par défaut à la fin de la partie du tableau.<🎜>
3
table.remove (table [, pos])<🎜>Renvoie l'élément à la position pos dans la partie du tableau du tableau qui sera avancé. pos Le paramètre est facultatif et prend par défaut la longueur du tableau, qui est supprimée du dernier élément. <🎜>
5table.sort (table [, comp])<🎜>Pour le tableau donné Trier par ordre croissant. <🎜>

Jetons ensuite un coup d’œil à des exemples de ces méthodes.

Connexion de table

Nous pouvons utiliser la méthode concat() pour connecter deux tables :

fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))

-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,", "))

-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))

Le résultat de l'exécution du code ci-dessus est :

连接后的字符串 	bananaorangeapple
连接后的字符串 	banana, orange, apple
连接后的字符串 	orange, apple

Insérer et supprimer

L'exemple suivant montre les opérations d'insertion et de suppression de la table :

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

-- 在末尾插入
table.insert(fruits,"mango")
print("索引为 4 的元素为 ",fruits[4])

-- 在索引为 2 的键处插入
table.insert(fruits,2,"grapes")
print("索引为 2 的元素为 ",fruits[2])

print("最后一个元素为 ",fruits[5])
table.remove(fruits)
print("移除后最后一个元素为 ",fruits[5])

Le résultat de l'exécution du code ci-dessus est :

索引为 4 的元素为 	mango
索引为 2 的元素为 	grapes
最后一个元素为 	mango
移除后最后一个元素为 	nil

Tri des tables

ci-dessous L'exemple montre l'utilisation de la méthode sort() pour trier le tableau :

fruits = {"banana","orange","apple","grapes"}
print("排序前")
for k,v in ipairs(fruits) do
	print(k,v)
end

table.sort(fruits)
print("排序后")
for k,v in ipairs(fruits) do
	print(k,v)
end

Le résultat de l'exécution du code ci-dessus est :

排序前
1	banana
2	orange
3	apple
4	grapes
排序后
1	apple
2	banana
3	grapes
4	orange

Valeur maximale du tableau

table.maxn Cette méthode n'existe plus après Lua5.2, et nous définissons la méthode table_maxn pour l'implémenter.

L'exemple suivant montre comment obtenir la valeur maximale dans le tableau :

function table_maxn(t)
    local mn = 0
    for k, v in pairs(t) do
        if mn < k then
            mn = k
        end
    end
    return mn
end
tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}
print("tbl 长度 ", #tbl)
print("tbl 最大值 ", table_maxn(tbl))

Le résultat de l'exécution du code ci-dessus est :

tbl 长度 	3
tbl 最大值 	26