English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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
Voici une liste des méthodes couramment utilisées pour l'opération Table :
Numéro | Méthode & Utilisation |
---|---|
1 | table.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). |
2 | table.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. |
3 | table.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) |
4 | table.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. |
5 | table.sort (table [, comp]) Trier le tableau donné en ordre croissant. |
Voici quelques exemples de ces méthodes.
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
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
以下示例演示了 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.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