Como remover uma entrada da tabela Lua por sua chave?
Pergunta
Eu tenho uma tabela Lua que eu uso como um hashmap, ou seja, com teclas de string:
local map = { foo = 1, bar = 2 }
Eu gostaria de "pop" um elemento desta tabela identificada por sua chave. Existe um table.remove()
Método, mas é preciso apenas o índice do elemento para remover (ou seja, um número) e não uma chave genérica. Eu gostaria de poder fazer table.remove(map, 'foo')
E aqui está como eu o implementei:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Existe uma maneira melhor de fazer isso?
Solução
Não, definindo o valor da chave para nil
é a maneira aceita de remover um item na parte de hashmap de uma tabela. O que você está fazendo é padrão. No entanto, eu recomendo não substituir table.remove()
- Para a parte da matriz de uma tabela, a funcionalidade Table.Remove () padrão inclui renuminar os índices, o que sua substituição não faria. Se você deseja adicionar sua função ao table
conjunto de funções, então eu provavelmente nomearia algo como table.removekey()
ou alguns.