Pergunta

Não consigo obter o índice de entrada da tabela.Eu preciso dele para remover um item da mesa.

eu uso table.insert para adicionar entradas à tabela.

Outra pergunta:por que Lua não tem "sobrecarga" para funcionar table.remove para que se possa remover item por índice associativo?

Foi útil?

Solução

t[k]=nil remove de t a entrada com chave k.

Para a segunda pergunta, a resposta é que as tabelas podem ter metatabelas individuais.

Outras dicas

As tabelas implementam uma relação não ordenada entre chaves e valores. Em outras palavras, qualquer chave em particular (índice) só pode aparecer uma vez em uma tabela, mas um valor pode aparecer várias vezes.

Se você conhece a chave k, então t[k] = nil removerá a chave e o valor associado da tabela. No entanto, esta operação não tem efeito em outras chaves ou valores na tabela.

o table.insert e table.remove As funções operam com o conjunto de teclas inteiras seqüenciais a partir de 1, que são usadas por convenção para implementar matrizes ou listas. Para esse fim, eles manipulam outros valores na lista para impedir que a lista desenvolva buracos.

Uma maneira de encontrar uma chave na qual algum valor é encontrado é simplesmente pesquisar na tabela. Se isso for feito mais de uma vez, provavelmente é uma boa idéia criar uma segunda tabela que inverte os pares de chave/valor, para que a pesquisa por valor seja tão rápida quanto a pesquisa por índice.

Uma implementação adequada dependerá de suas suposições e necessidades. Algumas amostras são:

-- return the first integer index holding the value 
function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

-- return any key holding the value 
function AKeyOf(t,val)
    for k,v in pairs(t) do 
        if v == val then return k end
    end
end

-- return all keys holding the value
function AllKeysOf(t,val)
    local s={}
    for k,v in pairs(t) do 
        if v == val then s[#s+1] = k end
    end
    return s
end

-- invert a table so that each value is the key holding one key to that value 
-- in the original table.
function Invert(t)
    local i={}
    for k,v in pairs(t) do 
        i[v] = k
    end
    return i
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top