Как создать мелкую копию массива в ActionScript 3 - PullRequest
4 голосов
/ 27 апреля 2011
var a:Array = ["a","b","c"];

var b:Array;

/* insert code here to copy 'a' and assign it to 'b'*/

Ответы [ 3 ]

11 голосов
/ 27 апреля 2011

Взято из справочника As3:

У класса Array нет встроенного метод изготовления копий массивов. Вы можете создать мелкую копию массив путем вызова либо concat () или slice () методы без аргументов. В мелкой копии, если оригинал массив имеет элементы, которые являются объектами, только ссылки на объекты скопированы, а не объекты самих себя. Копия указывает на те же объекты, что и оригинал. любой изменения, внесенные в объекты отражено в обоих массивах.

Конкат будет подходящим вариантом, если вы выберете конкат и слайс, так как конкат быстрее с точки зрения производительности.

Подробнее об этом можно прочитать здесь: http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ee7.html

уточнить:

    private function shallowCopy():void{
        var a:Array = ["h", "e", "l", "l", "o"];
        var b:Array = a.concat(); 

        trace("Shallow copy:");
        trace("Before delete: " + a);
        trace("Before delete: " + b);
        delete a[0];
        trace("After delete: " + a);
        trace("After delete: " + b);            
    }
8 голосов
/ 27 апреля 2011

Строка, о которой идет речь:

var b:Array = a.concat();
0 голосов
/ 24 мая 2016

Если массив содержит только строковые или числовые значения, достаточно сделать «мелкую» копию, как описано Адамом и rzetterberg.

Если массив содержит другие массивы или экземпляры объектов / классов и т. Д.тогда вам следует сделать глубокую копию, если вам нужно, чтобы все объекты внутри были также уникальными, а не просто ссылками.Вы можете достичь этого с помощью:

var ba:ByteArray = new ByteArray(); 
ba.writeObject(a); // Copy the original array (a) into a ByteArray instance
ba.position = 0; // Put the cursor at the beginning of the ByteArray to read it
var b:Array = ba.readObject(); // Store a copy of the array in the destination array (b)
ba.clear(); // Free memory

Это также полезно для копирования объектов, у которых нет методов concat или splice.

...