2010-03-10 13 views

Respuesta

6

No creo que haya un comando claro explícito.

Sin embargo, se podría escribir su propio que sería bucle a través de todas las llaves y ejecutar este

delete dict[key]; 

o simplemente puede reasignar

dict = new Dictionary() 
+0

Mi objetivo fue reutilizar el 'Diccionario' en lugar de crear uno nuevo. –

6

I que esto va a funcionar, pero yo No estoy 100% seguro, ya que está modificando el diccionario mientras lo itera:

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

Sin embargo, generalmente solo creo un nuevo diccionario cada vez que necesito borrar uno (aunque si se hace referencia en varios lugares, puede que eso no funcione para usted).

+2

+1 funciona. lo probé corriendo dos veces, estaba vacío después de la primera ejecución. –

+2

El código anterior tiene un defecto: 'id' debe ser de NO tipo, ya que un diccionario puede contener cualquier tipo de objeto como referencia clave y no solo una cadena como los objetos dinámicos. ¡El código de arriba SÓLO borrará las referencias de cadena! –

+0

Edité la respuesta para arreglar el defecto. id ahora está sin tipo (*), por lo que puede tomar cualquier tipo y borrar todas las claves posibles. Cuando se tipeó como una cadena, id solo borraba las claves de cadena; además, no se generan errores, y id no es nulo para las claves que no son cadenas, simplemente se omiten durante la iteración. Entonces, id debe estar sin tipo para iterar sobre todas las claves posibles. – Triynko

1

No solo necesita asegurarse de que la clave sea del tipo object o * necesite obtener primero las claves y luego eliminarlas del diccionario. De lo contrario, terminará dejando una tecla en el diccionario (la última).

Recuerdo que el código anterior funcionaba antes pero recientemente ha cambiado con la última iteración de Flash Player.

Este código asegurará que se eliminen todos, incluido el último.

//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

Para eliminar todos los elementos en el diccionario, bucle a través de cada tecla y utilizar la palabra clave de eliminación

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

Si quieres estar 100% seguro de que sus claves eliminadas se recogen basura, usted debe reemplace su instancia de Diccionario con un nuevo Diccionario.

dict = new Dictionary(); 

Una vez tuve un objeto de diccionario con 3 millones de cadenas como claves. Esas cadenas solo serían basura recolectada cuando la instancia del diccionario en sí.

0

Justo:

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

utilizar la función anterior como una función de utilidad y se puede utilizar a lo largo de su base de código.

Cuestiones relacionadas