Eu tenho uma tabela lua que uso como um hashmap, ou seja, com chaves de string:
local map = { foo = 1, bar = 2 }
Eu gostaria de "estourar" um elemento desta tabela identificado por sua chave. Existe um table.remove()
método, mas leva 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 implementei:
function table.removekey(table, key)
local element = table[key]
table[key] = nil
return element
end
Existe uma maneira melhor de fazer isso?
Respostas:
Não, definir o valor da chave como
nil
é a maneira aceita de remover um item na parte do hashmap de uma tabela. O que você está fazendo é padrão. No entanto, eu recomendo não substituirtable.remove()
- para a parte do array de uma tabela, a funcionalidade padrão table.remove () inclui renumerar os índices, o que sua substituição não faria. Se você quiser adicionar sua função aotable
conjunto de funções, provavelmente eu a nomearia comotable.removekey()
ou algo parecido .fonte
table.removekey()
seria minha melhor escolha também).table.insert
etable.remove
no namespace local se eu estou usando-los com freqüência, muitas vezes como algo comotinsert()
etremove()
.