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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top