Copia/clonación de un ArrayCollection


En lo que llevo de tiempo como desarrollador Flex (que es mas bien corto), siempre he estado bastante intrigado en el tema de copiar/clonar un ArrayCollection de una variable a otra. Normalmente utilizaba un script que utilizando Reflection recorría todos los items del ArrayCollection de origen y los iba colocando en el nuevo ArrayCollection. ¿Que pasaba cuando los items del ArrayCollection original tenían atributos que también eran ArrayCollections? pues en realidad nada, pero el script resultaba algo lento puesto que el bucle que se generaba tenía muchas iteraciones.

Hoy navegando por internet he encontrado un método que permite hacer esta clonación de manera mucho más rápida y sencilla.


public function cloneArrayCollections
          (source:ArrayCollection):ArrayCollection{
  var clone: ByteArray = new ByteArray ();
  clone.writeObject (source);
  clone.position = 0;
  return  ArrayCollection(clone.readObject());
}

La única pega, que por cierto es bastante importante, es que al crear el nuevo ArrayCollection, el tipo de los objectos que lo componen se pierde, y lo que obtenemos en el nuevo ArrayCollection es una colección de objectos Object.

Information and Links

Join the fray by commenting, tracking what others have to say, or linking to it from your blog.


Other Posts
¿Como abrir una página HTML desde Flex?
Optimización de Web Sites

Write a Comment

Take a moment to comment and tell us what you think. Some basic HTML is allowed for formatting.

Reader Comments

Pues yo extendería un poco este método para que clonara todo lo que le echaras. Además si lo haces estático ya no tienes que instanciar la clase… :P

public static function clone(source:*):*
{
var clone:ByteArray = new ByteArray();
clone.writeObject (source);
clone.position = 0;
return clone.readObject();
}

Un saludo!

Alberto

Mira, ni pa ti ni pa mi, resulta que la clase mx.utils.ObjectUtil ofrece un método estático con el nombre ObjectUtil.copy que realiza exactamente lo que se ha descrito en este post :)

Es una clase bastante útil y recomiendo echarle un vistazo y analizar los métodos de que dispone.

mx.utils.ObjectUtil

Ok, tienes toda la razón. A veces es más fácil hacerte un metodillo que buscar si hay algo hecho… :P

Nos vemos!

Interesante…
Sin embargo yo siempre he pensado que al introducir objetos de un determinado tipo en un ArrayColletion, estos aunque obviamente conservan su estructura pasan a ser de tipo Object siempre. No es así?

No, no es así. Los items que vas introduciendo en el ArrayCollection conservan su tipo, de manera que si metes objectos Usuario, estos seguirán siendo objectos Usuario no Objects, y menos mal! pq si no, adiós a hacer Casting :)