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

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

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

Регистрация: Aug 2010
Адрес: http://sociofilm.ru
Сообщений: 23
По умолчанию Как объединить многомерные массивы?

Код AS3:
function getArrayStr(aArray: Array): String {
	var RetVal: String = "(";
	if (aArray.length > 1) {
		for (var i in aArray) {
			RetVal += getArrayStr(new Array(aArray[i]));
			if (i < aArray.length - 1) {
				RetVal += ",";
			}
		}
	}
	else {
		RetVal += aArray.toString();
	}
	RetVal += ")";
	return RetVal;			
}
 
function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
}
 
var a: Array = [[1,2],3];
var b: Array = [4];
var c: Array = [];
 
trace("a:", getArrayStr(a), "length:", a.length);
trace("b:", getArrayStr(b), "length:", b.length);
 
c = new Array(clone(a), clone(b));
 
trace("c:", getArrayStr(c), "length:", c.length);
Вопрос: как получить массив "c", в точности состоящий из двухмерного массива "а" и добавленного "b", т.е. "(1,2),3,4", а получается почему то "(1,2,3),4".

Добавлено через 6 минут
Вариант:
Код AS3:
c = new Array(a.concat(),b.concat());
тоже не прокатывает...

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

Регистрация: Dec 2009
Сообщений: 428
Код AS3:
function getArrayStr(aArray: Array): String {
	var RetVal: String = "(";
	if (aArray.length > 1) {
		for (var i in aArray) {
			RetVal += getArrayStr(new Array(aArray[i]));
			if (i < aArray.length - 1) {
				RetVal += ",";
			}
		}
	}
	else {
		RetVal += aArray.toString();
	}
	RetVal += ")";
	return RetVal;			
}
 
function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
}
 
var a: Array = [[1,2],3];
var b: Array = [4];
var c: Array = [];
 
trace("a:", getArrayStr(a), "length:", a.length);
trace("b:", getArrayStr(b), "length:", b.length);
 
c = new Array(clone(a), clone(b));
var d = new Array(clone(a),clone(b));
trace("c:", getArrayStr(c), "length:", c.length);
trace("d:", d, 'd[0]:',d[0], 'd[0][0]:', d[0][0], "length:", d.length);
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 20.09.2010, 13:11
Sociofilm вне форума Посмотреть профиль Отправить личное сообщение для Sociofilm Найти все сообщения от Sociofilm
  № 3  
Ответить с цитированием
Sociofilm

Регистрация: Aug 2010
Адрес: http://sociofilm.ru
Сообщений: 23
leofit,
ну а как получить (1,2),3,4 - массив из 3 элементов?

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

Регистрация: Dec 2009
Сообщений: 428
Код AS3:
function getArrayStr(aArray: Array): String {
	var RetVal: String = "(";
	if (aArray.length > 1) {
		for (var i in aArray) {
			RetVal += getArrayStr(new Array(aArray[i]));
			if (i < aArray.length - 1) {
				RetVal += ",";
			}
		}
	}
	else {
		RetVal += aArray.toString();
	}
	RetVal += ")";
	return RetVal;			
}
 
function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
}
 
var a: Array = [[1,2],3];
var b: Array = [4];
var c: Array = [];
 
trace("a:", getArrayStr(a), "length:", a.length);
trace("b:", getArrayStr(b), "length:", b.length);
 
c = new Array(clone(a), clone(b));
var d = new Array(clone(a),clone(b));
a.push(b);
trace("c:", getArrayStr(c), "length:", c.length);
trace("d:", d, 'd[0]:',d[0], 'd[0][0]:', d[0][0], "length:", d.length);
trace("a:", a, 'a[0]:',a[0],  'a[1]:', a[1], 'a[2]:', a[2], "length:", a.length);
__________________
Скажи мне кто твой друг и я скажу тебе кто твой друг

Старый 20.09.2010, 13:36
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 5  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Код AS3:
function myPush(to:Array, from:Array):void{
  for(var i:int = 0; i < from.length; ++i) to.push(from[i]);
}
c = myPush(clone(a), b);
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 20.09.2010 в 14:53.
Старый 20.09.2010, 14:29
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 6  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
а slice у массивов перестал работать? зачем через бинарник клонировать? ужас какой.

Старый 20.09.2010, 14:37
Sociofilm вне форума Посмотреть профиль Отправить личное сообщение для Sociofilm Найти все сообщения от Sociofilm
  № 7  
Ответить с цитированием
Sociofilm

Регистрация: Aug 2010
Адрес: http://sociofilm.ru
Сообщений: 23
BlooDHounD,

clone() взята из хелпа на адобе, slice да, тоже подходит

Кстати, а как распечатать многомерный массив поэлементно?
Обычный trace(a) выводит многомерный в формате одномерного и трудно догадываться, сколько в нем реально элементов.

Старый 20.09.2010, 14:56
Dweem вне форума Посмотреть профиль Отправить личное сообщение для Dweem Найти все сообщения от Dweem
  № 8  
Ответить с цитированием
Dweem
 
Аватар для Dweem

Регистрация: Dec 2006
Адрес: 66°32′00″ с. ш. 66°38′00″ в. д.
Сообщений: 85
Код AS3:
private function traceArr(arr:Array,m:String = ""):void {
	for (var i:int=0;i<arr.length;i++){
		if(arr[i] is Array) traceArr(arr[i],m+"  ")
		else trace(m+arr[i]);
	}
}
traceArr(array)
вроде такого?

Старый 20.09.2010, 14:58
Sociofilm вне форума Посмотреть профиль Отправить личное сообщение для Sociofilm Найти все сообщения от Sociofilm
  № 9  
Ответить с цитированием
Sociofilm

Регистрация: Aug 2010
Адрес: http://sociofilm.ru
Сообщений: 23
Dweem,
ага, спасибо!

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

Теги
копирование , массивы , многомерные

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

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


 


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


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