Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Приравнивание массивов не по ссылке (http://www.flasher.ru/forum/showthread.php?t=94508)

OracleN 13.04.2007 19:20

Приравнивание массивов не по ссылке
 
Господа, вопрос. Есть 2 массива array1 и array2. Как сделать чтобы array2 был равен array1 но не по ссылке, т.е. аналог функии дельфи assign вроде.
Пока я нашел что только по элементам надо пробегаться да и назначать, может есть другой вариант.

MINASTIS 13.04.2007 19:26

Да просто приравниваешь. Пример:
Код:

var ar1:Array = new Array("g", "b");
var ar2:Array;
ar2 = ar1;
trace(ar2[1]);


OracleN 13.04.2007 19:27

Дык так и делаю, просто хотел уточнить. Вдруг более верный путь есть.

Спасибо.

iNils 13.04.2007 20:02

MINASTIS, то что вы написали, это и есть ссылка на массив, сделать копию массива можно с помощью concat
Код:

var a1:Array = [0, 1, 2];
var a2:Array;
var a3:Array;
a2 = a1;
a3 = a1.concat ();
a1[0] = 100;
trace (a1); //100,1,2
trace (a2); //100,1,2
trace (a3); //0,1,2


MINASTIS 13.04.2007 20:05

iNils имеешь ввиду если изменить ar2 изменится и ar1?

iNils 13.04.2007 20:08

Цитата:

Сообщение от MINASTIS
iNils имеешь ввиду если изменить ar2 изменится и ar1?

Конечно. На самом деле массива a2 не существует, это ссылка на a1. А вот a3 новый массив, построенный на данных из a1, только надо учитывать, что concat из многомерного массива сделает одномерный и он не работает с ассоциациями.

Kikasso 14.04.2007 01:58

Цитата:

Сообщение от iNils
только надо учитывать, что concat из многомерного массива сделает одномерный

В смысле?
Код:

var a1:Array = [[0, 1, 2],[0, 1, 2],[0, 1, 2]];
var a3:Array = a1.concat();
a1[0] = [2,3,4];
a3[2] = [5,6,7];
function traceArr( arr ){
 for(var i=0; i<arr.length; i++)trace( i+ "> " + arr[i] );
}
traceArr (a1);
//0> 2,3,4
//1> 0,1,2
//2> 0,1,2
traceArr (a3);
//0> 0,1,2
//1> 0,1,2
//2> 5,6,7


iNils 14.04.2007 03:42

Цитата:

Сообщение от Kikasso
В смысле?

Меня бес попутал, даже в хелпе есть пример :rolleyes:


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

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