Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как скопировать все ЗНАЧЕНИЯ Vector.<T> (http://www.flasher.ru/forum/showthread.php?t=185014)

Unkeep 02.10.2012 20:39

как скопировать все ЗНАЧЕНИЯ Vector.<T>
 
Здравствуйте. Как скопировать все значения Vector.<Face> (причём Face-класс. в котором главный атрибут Vector.<Point>). Мне нужно именно скопировать значения, а не ссылки. Чтобы изменения сделанные в скопированном векторе не затрагивали оригинала.

Frost47rus 02.10.2012 20:53

Код AS3:

var VectorCopy:Vector.<Face> = new Vector.<Face>();
for (var i:int = 0; i < MyVector.length; i++){
 var face:Face = new Face();
 face.attribute = MyVector[i].attribute;
 VectorCopy.push(face);
}


derhab 02.10.2012 20:55

Vector#slice() не подойдет?

artcraft 02.10.2012 20:56

автоматически сделать этого невозможно

вам нужно в цикле пройтись по всем элементам вектора и создать клон каждого Face, занося эти клоны в новый вектор

ну и клонируя Face тоже нужно в цикле клонировать Point-ы

будь у вас там вместо Face и Point нетипизированные object-ы можно было бы клонировать так
Код AS3:

public static function cloneVanillaObject( obj:Object ):Object{
        var ba:ByteArray = new ByteArray();
        ba.writeObject( obj );
        ba.position = 0;
        return ba.readObject() as Object;
}

Добавлено через 4 минуты
@Frost47rus там вектор векторов, поэтому вместо строчки
Код:

face.attribute = MyVector[i].attribute;
нужен еще один цикл

Unkeep 02.10.2012 21:05

спасибо. Жаль что другого варианта нет

artcraft 02.10.2012 21:12

впрочем можно похимичить с клонирование через ByteArray и испльзуя registerClassAlias()
не знаю как оно будет вести себя с вложенными объектами

Добавлено через 4 минуты
советую копать вот в этом направлении
http://www.rozengain.com/blog/2009/0...tionscript-30/
http://jafferhaider.wordpress.com/20...ctionscript-3/
https://github.com/as3/as3-utils/blo...bject/clone.as

Unkeep 02.10.2012 22:23

пошёл в обходную. Решил не заморачиваться с копированием, а на этапе заполнения вектора значениями заносить их в копию.

alatar 03.10.2012 05:16

Цитата:

Сообщение от artcraft (Сообщение 1098276)
не знаю как оно будет вести себя с вложенными объектами

Нормально будет себя вести, естественно, для невизуальных объектов реализующих IExternalizable.

tsarapkabel 03.10.2012 15:00

Цитата:

Сообщение от alatar (Сообщение 1098295)
Нормально будет себя вести, естественно, для невизуальных объектов реализующих IExternalizable.

Можно поподробнее, как ты это определил? Почему IExternalizable?

alatar 03.10.2012 16:25

1. На практике.
2. Потому, что объекты должны уметь себя сериализовать/десериализовать, что бы нормально и контролируемо восстановить свое состояние.
http://help.adobe.com/ru_RU/FlashPla...nalizable.html


Часовой пояс GMT +4, время: 19:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.