2009-12-01 5 views
1

Par exemple:Dans Lua, comment supprimer une table dans une table?

items = { 
    [753] = { 
    }, 
    [192] = { 
    }, 
    [789] = { 
    }, 
    [791] = { 
    }, 
    [790] = { 
    }, 
    [776] = { 
    }, 
} 

Je voudrais supprimer 789 et toutes les données à l'intérieur de celui-ci. J'ai essayé les deux: table.remove (items, 2); et table.remove (items, 789); (Je ne savais pas comment l'indexation fonctionnait) sans chance.

Répondre

7

Il est aussi facile que

items[789] = nil 

En Lua, si une clé dans une table a une valeur nil, il est comme si la clé n'existe pas.

> 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 

Voir aussi Progamming in Lua, section 2.5. (Même si la version en ligne est écrite pour Lua 5.0, cela s'applique toujours à Lua 5.1)

... vous pouvez affecter zéro à un champ de table pour le supprimer.

Lorsque vous attribuez nil à votre index, qui ne fonctionne pas explicitement supprimer ce qui a déjà été stocké dans cet index; mais cela réduit le nombre de références pour ce qui y est stocké, ce qui le rend potentiellement éligible pour la collecte des ordures.

+0

Wow, merci pour l'aide, essayé de faire une douzaine de façons différentes sans la chance :) – Rob

+2

Si vous n'avez pas utilisé un langage récupéré par ordures qui utilise la réaffectation pour supprimer les variables avant, je ne pense pas que l'attribution 'nil' serait la première estimation de quelqu'un. Quoi qu'il en soit, vous êtes les bienvenus. –

Questions connexes