Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.05.2013, 01:09
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 1  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
По умолчанию Скопировать двумерный массив

Добрый вечер!

Как скопировать двумерный (массив массивов), чтоб при изменении копии исходник оставался без изменении?
Пробовал concat(); - копируется, но в исходном массиву данные так же изменяется =(

Старый 02.05.2013, 01:20
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
но в исходном массиву данные так же изменяется
Видимо, потому что данные — ссылки на объекты? Вы создали копию ссылки, а не объекта. Вы изменяете сам объект. Он один. На него просто две разные ссылки.
__________________
Reality.getBounds(this);

Старый 02.05.2013, 01:34
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 3  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Код AS1/AS2:
private var _map:Array;
private var _geoData:Array;
 
///.......
 
_map = _ogmoImporter.getImportedMap(); // это самописный класс для импорта, метод возвращает массив
_geoData = _map.concat(); // попытка скопировать
в массиве данные типа int.
пробовал вот так
Код AS1/AS2:
_map = _ogmoImporter.getImportedMap().concat();
_geoData = _map.concat();
и так
Код AS1/AS2:
_map = _ogmoImporter.getImportedMap().concat();
_geoData = _ogmoImporter.getImportedMap().concat();
написал метод копирования в ручную
Код AS1/AS2:
private function copyToGeoData():void 
		{
			var lengthX:uint = _map.length;
			for (var i:int = 0; i < lengthX; i++) 
			{
				var lengthY:uint = _map[i].length;
				_geoData.push(new Array(lengthY));
 
				for (var j:int = 0; j < lengthY; j++) 
				{
					_geoData[i][j] = _map[i][j];
				}
			}
		}
насколько сильно медленнее будет работать этот метод от concat()?

Старый 02.05.2013, 01:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
А так не пробовали?
Код AS3:
			var arr:Array = [2, 12, 85, 06];
			var bar:Array = arr.concat();
			bar[0] = 8;
			trace(arr[0]); // 2
Метод тыка еще никого ничему не научил. Надо ошибки искать, а не перебирать знакомые слова.
Простые типы копируются по значению. Если у Вас не копируются — значит они не простые. Либо проверяете неправильно. Все "чудеса" от невнимательности.
__________________
Reality.getBounds(this);

Старый 02.05.2013, 02:07
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 5  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Ваш пример работает. Но если с двумерным массивом - не рабоет
Код AS1/AS2:
var arr:Array = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 012], [013, 14, 15, 16]];
			var bar:Array = arr.concat();
			bar[0][0] = 8;
			trace(arr[0][0]); // 8
может каждый массив в массиве надо копировать по отдельности? =)) Глупость сморозил походу...

Старый 02.05.2013, 02:08
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Естественно, потому что данные в массиве, которому Вы делаете concat() — не int, а Array.
Код AS3:
private function copyToGeoData():void 
		{
			var lengthX:uint = _map.length;
			for (var i:int = 0; i < lengthX; i++) 
			{
				_geoData[i] = _map[i].concat();
			}
		}
__________________
Reality.getBounds(this);

Старый 02.05.2013, 02:12
Wazzabi вне форума Посмотреть профиль Отправить личное сообщение для Wazzabi Найти все сообщения от Wazzabi
  № 7  
Ответить с цитированием
Wazzabi

Регистрация: Apr 2012
Сообщений: 70
Теперь понял, спасибо большое!

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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