web-dev-qa-db-fra.com

Comment supprimer une entrée de table lua par sa clé?

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 ce tableau identifié par sa clé. Il existe une méthode table.remove(), mais elle ne prend que l'index de l'élément à supprimer (c'est-à-dire un nombre) et non une clé générique. Je voudrais pouvoir 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 le faire?

83
Wookai

Non, la définition de la valeur de la clé sur nil est la méthode acceptée pour supprimer un élément dans la partie de la table de hachage d'une table. Ce que vous faites est standard. Cependant, je vous recommande de ne pas remplacer table.remove() - pour la partie tableau d'une table, la fonctionnalité table.remove () par défaut inclut la renumérotation des index, ce que votre remplacement ne ferait pas. Si vous voulez ajouter votre fonction à l'ensemble de fonctions table, je le nommerais probablement quelque chose comme table.removekey() ou quelque chose du genre.

73
Amber