Je voudrais créer un contient sur la méthode de Lua table
structure de données qui vérifierait l'existence d'une clé. L'utilisation ressemblerait à ceci :
mytable = {}
table.insert(mytable, 'key1')
print(mytable.contains('key1'))
Merci.
Je voudrais créer un contient sur la méthode de Lua table
structure de données qui vérifierait l'existence d'une clé. L'utilisation ressemblerait à ceci :
mytable = {}
table.insert(mytable, 'key1')
print(mytable.contains('key1'))
Merci.
En Lua, vous ne pouvez pas modifier TOUTES les tables à la fois. Vous pouvez le faire avec des types plus simples, comme les nombres, les chaînes de caractères, les fonctions, où vous pouvez modifier leur métatable et ajouter une méthode à toutes les chaînes de caractères, toutes les fonctions, etc. Cela est déjà fait dans Lua 5.1 pour les chaînes de caractères, c'est pourquoi vous pouvez le faire :
local s = "<Hello world!>"
print(s:sub(2, -2)) -- Hello world!
Les tableaux et les données utilisateur comportent des métatables pour les éléments suivants chaque cas . Si vous voulez créer une table avec une méthode personnalisée déjà présente, un simple constructeur de table ne fera pas l'affaire. Cependant, en utilisant le sucre syntaxique de Lua, vous pouvez faire quelque chose comme ceci :
local mytable = T{}
mytable:insert('val1')
print(mytable:findvalue('val1'))
Pour ce faire, vous devez écrire ce qui suit avant d'utiliser l'option T
:
local table_meta = { __index = table }
function T(t)
-- returns the table passed as parameter or a new table
-- with custom metatable already set to resolve methods in `table`
return setmetatable(t or {}, table_meta)
end
function table.findvalue(tab, val)
for k,v in pairs(tab) do
-- this will return the key under which the value is stored
-- which can be used as a boolean expression to determine if
-- the value is contained in the table
if v == val then return k end
end
-- implicit return nil here, nothing is found
end
local t = T{key1='hello', key2='world'}
t:insert('foo')
t:insert('bar')
print(t:findvalue('world'), t:findvalue('bar'), t:findvalue('xxx'))
if not t:findvalue('xxx') then
print('xxx is not there!')
end
--> key2 2
--> xxx is not there!
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.