English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

table (表) Lua

La table est une structure de données de Lua utilisée pour nous aider à créer différents types de données, tels que les tableaux, les dictionnaires, etc.

Les tables Lua utilisent des tableaux associatifs, vous pouvez utiliser n'importe quel type de valeur comme index du tableau, mais cette valeur ne peut pas être nil.

Les tables Lua ne sont pas de taille fixe, vous pouvez les agrandir selon vos besoins.

Lua résout également les modules (module), les packages (package) et les objets (Object) via des tables. Par exemple, string.format indique l'utilisation de "format" pour indexer la table string.

Construction de table (table)

L'constructeur est une expression de création et d'initialisation de table. La table est une fonctionnalité puissante spécifique à Lua. Le constructeur le plus simple est {}, utilisé pour créer une table vide. Vous pouvez directement initialiser un tableau:

-- Initialiser la table
mytable = {}
-- Spécifier une valeur
mytable[1]= "Lua"
-- Supprimer les références
mytable = nil
-- Le recyclage des déchets Lua libère la mémoire

Lorsque nous définissons des éléments pour la table a et assignons a à b, a et b pointent vers la même mémoire. Si a est défini sur nil Si b peut également accéder aux éléments de table, s'il n'y a pas de variable spécifiée pour a, le mécanisme de recyclage des déchets de Lua nettoiera la mémoire correspondante.

Le tableau suivant montre les situations décrites ci-dessus :

-- Table simple
mytable = {}
print("Le type de mytable est ", type(mytable))
mytable[1]= "Lua"
mytable["wow"] = "avant modification"
print("mytable indexé de 1 l'élément est ", mytable[1])
print("L'élément de l'index wow de mytable est nil", mytable["wow"])
-- alternatetable et mytable se réfèrent au même tableau
alternatetable = mytable
print("alternatetable indexé de 1 l'élément est ", alternatetable[1])
print("L'élément de l'index wow de mytable est nil", alternatetable["wow"])
alternatetable["wow"] = "modifié"
print("L'élément de l'index wow de mytable est nil", mytable["wow"])
-- Libérer les variables
alternatetable = nil
print("alternatetable est nil", alternatetable)
-- mytable peut toujours être accédé
print("L'élément de l'index wow de mytable est nil", mytable["wow"])
mytable = nil
print("mytable est nil", mytable)

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

Le type de mytable est nil, tableau
mytable indexé de 1 l'élément est nil, Lua
L'élément de l'index wow de mytable est nil, avant modification
alternatetable indexé de 1 l'élément est nil, Lua
L'élément de l'index wow de mytable est nil, avant modification
L'élément de l'index wow de mytable est nil, après modification
alternatetable est nil
L'élément de l'index wow de mytable est nil, après modification
mytable est nil

Opérations Table

Voici une liste des méthodes couramment utilisées pour l'opération Table :

NuméroMéthode & Utilisation
1table.concat (table [, sep [, start [, end]]]):

concat est l'abréviation de concatenate (chainé, connecté). La fonction table.concat() liste tous les éléments de la partie tableau spécifiée de l'argument de table à partir de la position start à la position end, séparés par le séparateur spécifié (sep).

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

Insérer un élément de valeur value à la position spécifiée (pos) dans la partie array de table. Le paramètre pos est optionnel, par défaut, à la fin de la partie array.

3table.maxn (table)

Spécifier la valeur clé maximale de tous les éléments positifs dans la table. Si il n'existe pas d'éléments avec une clé positive, alors retourne 0. (Lua5.2Cette méthode n'existe plus, cet article utilise une fonction personnalisée pour l'implémenter)

4table.remove (table [, pos])

Retourne une partie de l'array table située à la position pos. Les éléments suivants seront déplacés. Le paramètre pos est optionnel, par défaut, la longueur de table, c'est-à-dire à partir du dernier élément.

5table.sort (table [, comp])

Trier le tableau donné en ordre croissant.

Voici quelques exemples de ces méthodes.

Concaténation de Table

Nous pouvons utiliser concat() pour afficher une chaîne de caractères composée des éléments d'une liste:

fruits = {"banana","orange","apple"}
-- Retourne la chaîne de caractères concaténée de table
print("Chaîne de caractères jointe ",table.concat(fruits))
-- Caractère de connexion spécifié
print("Chaîne de caractères jointe ",table.concat(fruits,", "))
-- Connecter par index spécifié table
print("Chaîne de caractères jointe ",table.concat(fruits,", ", 2,3))

执行以上代码输出结果为:

Chaîne de caractères jointe     bananaorangeapple
Chaîne de caractères jointe     banana, orange, apple
Chaîne de caractères jointe     orange, apple

Insertion et suppression

Le suivant est un exemple de l'insertion et de la suppression de table:

fruits = {"banana","orange","apple"}
-- Insérer à la fin
table.insert(fruits,"mango")
print("L'indice est 4 Des éléments est ",fruits[4])
-- Insérer à l'indice 2 insérer à la position des clés
table.insert(fruits,2,"grapes")
print("L'indice est 2 Des éléments est ",fruits[2])
print("Le dernier élément est ",fruits[5])
table.remove(fruits)
print("Après suppression, le dernier élément est ",fruits[5])

执行以上代码输出结果为:

L'indice est 4 Des éléments est     mango
L'indice est 2 Des éléments est     grapes
Le dernier élément est     mango
Le dernier élément après suppression est     nil

Table tri

以下示例演示了 sort() 方法的使用,用于对 Table 进行排序:

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

执行以上代码输出结果为:

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

最大值 Table

table.maxn 在 Lua5.2 之后该方法已经不存在了,我们定义了 table_maxn 方法来实现。

以下示例演示了如何获取 table 中的最大值:

function table_maxn(t)
  local mn=nil;
  for k, v in pairs(t) do
    if(mn==nil) then
      mn=v
    end
    if mn < v then
      mn = v
    end
  end
  return mn
end
tbl = {[1] = 2, [2] = 6, [3] = 34, [26] =5}
print("tbl 最大值:", table_maxn(tbl))
print("tbl 长度 ", #tbl)

执行以上代码输出结果为:

tbl 最大值:    34
tbl 长度     3

注意:

当我们获取 table 的长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数,而导致无法正确取得 table 的长度。

可以使用以下方法来代替:

function table_leng(t)
  local leng=0
  for k, v in pairs(t) do
    leng=leng+1
  end
  return leng;
end