In Lua, come faccio a rimuovere una tabella all'interno di una tabella?
Domanda
Ad esempio:
items = {
[753] = {
},
[192] = {
},
[789] = {
},
[791] = {
},
[790] = {
},
[776] = {
},
}
Vorrei rimuovere 789 e tutti i dati al suo interno. Ho provato entrambi: table.remove (voci, 2); e table.remove (voci, 789); (Non ero sicuro di come l'indicizzazione ha lavorato) senza fortuna.
Soluzione
E 'facile come
items[789] = nil
In Lua, se una chiave in una tabella ha un valore nil
, allora è come se la chiave non esiste.
> t = { [5] = {}, [10] = {} }
> for k,v in pairs(t) do print(k,v) end
5 table: 0037CBC0
10 table: 0037CBE8
> t[5] = nil
> for k,v in pairs(t) do print(k,v) end
10 table: 0037CBE8
Progamming in Lua, sezione 2.5 . (Anche se la versione online è scritto per Lua 5.0, questo vale ancora da Lua 5.1)
... è possibile assegnare zero a un campo di tabella per eliminarlo.
Quando si assegna nil
per l'indice, che non lo fa esplicitamente cancellare ciò che è stato precedentemente memorizzato in tale indice; ma lo fa abbassare il conteggio di riferimento per quello che è stato immagazzinato lì, rendendo potenzialmente idoneo per la raccolta dei rifiuti.