2010-03-10 4 views

Répondre

6

Je ne crois pas qu'il existe une commande claire explicite.

Cependant, vous pouvez écrire votre propre qui boucle à travers toutes les clés et exécuter ce

delete dict[key]; 

Ou vous pouvez simplement réassigner

dict = new Dictionary() 
+0

Mon but était de réutiliser le 'Dictionary' au lieu d'en créer un nouveau. –

6

Je pense cela fonctionnera, mais je Je ne suis pas sûr à 100%, car vous modifiez le dictionnaire en le répétant:

function clear(d:Dictionary):void { 
    for(var id:* in d) { 
    delete d[id]; 
    } 
} 

Cependant, je crée généralement un nouveau dictionnaire chaque fois que je dois en effacer un (bien que s'il est référencé à plusieurs endroits, cela pourrait ne pas fonctionner pour vous).

+2

+1 fonctionne. testé en parcourant deux fois, il était vide après la première exécution. –

+2

Le code ci-dessus a un défaut: 'id' doit être de type NO, car un dictionnaire peut contenir n'importe quel type d'objet en tant que référence clé et pas seulement une chaîne comme le font les objets dynamiques. Le code ci-dessus supprimerait SEULEMENT les références de chaînes! –

+0

J'ai édité la réponse pour corriger le défaut. id est maintenant non typé (*), donc il peut prendre n'importe quel type et effacer toutes les clés possibles. Quand il a été tapé comme une chaîne, id ne ferait que effacer les clés de chaîne; de plus, aucune erreur n'est levée, et id n'est pas nul pour les clés non-string, elles sont simplement ignorées pendant l'itération. Donc id doit être non typé pour itérer sur toutes les clés possibles. – Triynko

1

Non seulement vous devez vous assurer que la clé est de type objet ou * vous devez d'abord récupérer les clés, puis les supprimer du dictionnaire. Sinon, vous finirez par une clé restante dans le dictionnaire (la dernière).

Je me souviens du code ci-dessus qui fonctionnait avant mais qui a récemment changé avec la dernière itération de Flash Player.

Ce code garantit qu'ils sont tous supprimés, y compris le dernier.

//Clean up the dictionary 
var keys:Array = []; 
var key:*; 
for (var key:* in dictionary) 
    keys.push(key); 
for each (var key:* in keys) 
    delete dictionary[ key ]; 
2

Pour supprimer tous les éléments dans le dictionnaire, boucle à travers chaque touche et utiliser le mot-clé de suppression

function clear(dict:Dictionary):void 
{  
    for(var key:Object in dict) 
    { 
     delete dict[key]; 
    } 
} 

Si vous voulez être sûr à 100% que vos clés supprimées sont les déchets collectés, vous devez remplacez votre instance de dictionnaire par un nouveau dictionnaire. Une fois, j'ai eu un objet Dictionnaire avec 3 millions de chaînes comme clés. Ces chaînes ne seraient collectées que lorsque l'instance du dictionnaire lui-même l'était.

0

Just:

dictionary = new Dictionary() 
0
public static function clear(dict:Dictionary):void { 
     var key:* 
     for(key in dict) { 
      delete dict[key]; 
     } 
    } 

Utilisez la fonction ci-dessus en fonction de l'utilité et vous pouvez l'utiliser tout au long de votre base de code.

Questions connexes