Je sais que c'est un vieux post, mais je voulais ajouter quelque chose pour la postérité. La façon simple de traiter le problème que vous avez est de faire une autre table, de valeur à clé.
Par exemple, vous avez deux tables qui ont la même valeur, l'une pointant dans une direction, l'autre dans l'autre.
function addValue(key, value)
if (value == nil) then
removeKey(key)
return
end
_primaryTable[key] = value
_secodaryTable[value] = key
end
function removeKey(key)
local value = _primaryTable[key]
if (value == nil) then
return
end
_primaryTable[key] = nil
_secondaryTable[value] = nil
end
function getValue(key)
return _primaryTable[key]
end
function containsValue(value)
return _secondaryTable[value] ~= nil
end
Vous pouvez ensuite interroger la nouvelle table pour voir si elle contient la clé "élément". Cela évite d'avoir à itérer sur chaque valeur de l'autre table.
S'il s'avère que vous ne pouvez pas utiliser l'"élément" comme clé, parce qu'il ne s'agit pas d'une chaîne de caractères, par exemple, ajoutez une somme de contrôle ou une clé de sécurité. tostring
sur elle par exemple, et ensuite l'utiliser comme clé.
Pourquoi voulez-vous faire ça ? Si vos tables sont très grandes, le temps d'itération de chaque élément sera important, ce qui vous empêchera de le faire très souvent. La surcharge mémoire supplémentaire sera relativement faible, car il s'agira de stocker deux pointeurs vers le même objet, plutôt que deux copies du même objet. Si vos tables sont très petites, alors cela aura beaucoup moins d'importance, en fait il peut même être plus rapide d'itérer que d'avoir une autre consultation de carte.
Le libellé de la question suggère toutefois fortement que vous avez un grand nombre d'éléments à traiter.
3 votes
Que signifie la notation _, ?
26 votes
C'est simplement une variable "poubelle" nommée
_
.pairs()
renvoie àkey, value
mais dans cet exemple, je n'ai besoin que de la valeur. C'est une sorte de convention (adoptée dans le livre "Programming in Lua") lua.org/pil/index.html ) pour utiliser ce_
variable pour stocker les choses dont vous n'avez pas besoin.0 votes
J'ai vu la convention de nommer les variables "poubelles".
_
utilisé en Python et en JavaScript, également.