Domanda

Non riesco a indice di voce della tabella. Ne ho bisogno per rimuovere un elemento dalla tabella.

Io uso table.insert per aggiungere voci al tavolo.

Un'altra domanda: perché Lua non ha "sovraccarico" di funzionare table.remove così si può rimuovere voce per indice associativo

?
È stato utile?

Soluzione

t[k]=nil rimuove dal t la voce con k chiave.

Per la seconda domanda, la risposta è che le tabelle possono avere singoli metatables.

Altri suggerimenti

Tabelle attuare una non ordinata uno a molti relazione tra chiavi e valori. In altre parole, una particolare chiave (indice) può apparire solo una volta in una tabella, ma un valore può apparire più volte.

Se si conosce il k chiave, quindi t[k] = nil rimuoverà sia la chiave e il valore associato dalla tabella. Tuttavia, questa operazione non ha alcun effetto su altre chiavi o valori della tabella.

Le funzioni table.insert e table.remove funzionano sopra l'insieme di chiavi intere sequenziali che parte da 1, che sono usati convenzionalmente per implementare matrici o elenchi. A tal fine, essi manipolano altri valori nella lista in modo da mantenere la lista in via di sviluppo fori.

Un modo per trovare una chiave in cui un certo valore si trova è semplicemente cercare la tabella. Se questo sarà fatto più di una volta, allora è probabilmente una buona idea di costruire una seconda tabella che inverte le coppie chiave / valore in modo che ricerca per valore è veloce come ricerca per indice.

Un'implementazione adatto dipenderà vostre ipotesi e le esigenze. Alcuni esempi sono:

-- 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top