Clonage de tableaux
Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures
La classe Array ne possède aucune méthode intégrée pour effectuer des copies de tableaux. Vous pouvez créer une
copie simple
d’un tableau en appelant la méthode
concat()
ou
slice()
sans arguments. Dans une copie simple, si le tableau d’origine a des éléments qui sont des objets, seules les références aux objets sont copiées (et non les objets). La copie pointe vers les mêmes objets que l’original. Tout changement effectué sur les objets apparaît dans les deux tableaux.
Dans une
copie en profondeur
, les objets se trouvant dans le tableau d’origine sont copiés également de façon à ce que le nouveau tableau ne pointe pas vers les mêmes objets que le tableau d’origine. La copie en profondeur exige plus d’une ligne de code, ce qui nécessite généralement la création d’une fonction. Une telle fonction peut être créée comme fonction d’utilitaire globale ou comme méthode d’une sous-classe Array.
L’exemple suivant définit une fonction appelée
clone()
qui effectue une copie en profondeur. L’algorithme est issu d’une technique de programmation Java courante. La fonction crée une copie en profondeur en sérialisant le tableau en une occurrence de la classe ByteArray puis en relisant le tableau dans un nouveau tableau. Cette fonction accepte un objet de façon à ce qu’il puisse être utilisé à la fois avec des tableaux indexés et des tableaux associatifs, comme indiqué dans le code suivant :
import flash.utils.ByteArray;
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
|
|
|