J'ai une table lua que j'utilise comme hashmap, c'est à dire avec des clés de chaîne:
local map = { foo = 1, bar = 2 }
Je voudrais "pop" un élément de cette table identifié par sa clé. Il existe une table.remove()
méthode, mais elle ne prend que l'index de l'élément à supprimer (c'est-à-dire un nombre) et non une clé générique. J'aimerais pouvoir le faire table.remove(map, 'foo')
et voici comment je l'ai implémenté:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Y a-t-il une meilleure façon de faire cela?
Réponses:
Non, définir la valeur de la clé sur
nil
est la manière acceptée de supprimer un élément dans la partie hashmap d'une table. Ce que vous faites est standard. Cependant, je vous recommande de ne pas remplacertable.remove()
- pour la partie tableau d'une table, la fonctionnalité par défaut table.remove () inclut la renumérotation des index, ce que votre remplacement ne ferait pas. Si vous voulez ajouter votre fonction à l'table
ensemble de fonctions, je lui donnerais probablement quelque chose commetable.removekey()
ou quelque chose comme ça .la source
table.removekey()
serait aussi mon meilleur choix).table.insert
ettable.remove
dans l'espace de noms local si je les utilise fréquemment, souvent comme quelque chose commetinsert()
ettremove()
.