I have a lua table that I use as a hashmap, ie with string keys :
local map = { foo = 1, bar = 2 }
I would like to "pop" an element of this table identified by its key. There is a table.remove()
method, but it only takes the index of the element to remove (ie a number) and not a generic key. I would like to be able to do table.remove(map, 'foo')
and here is how I implemented it :
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Is there a better way to do that ?
Best Answer
No, setting the key's value to
nil
is the accepted way of removing an item in the hashmap portion of a table. What you're doing is standard. However, I'd recommend not overridingtable.remove()
- for the array portion of a table, the default table.remove() functionality includes renumbering the indices, which your override would not do. If you do want to add your function to thetable
function set, then I'd probably name it something liketable.removekey()
or some such.