Форум 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=113355)

uglan 26.06.2008 01:28

Трехмерный массив с подобъектами
 
Доброго времени суток!
Подскажите, пожалуйста, как мне замутить трехмерный массивчик с вложенными объектами?
Пример(просто сам алгоритм):
a[0] = "aga";
a[0][0]="ugu";
a[0][1]="ugu2";
a[0][1][0].name = "ege";
a[0][1][0].num = 10;
a[0][1][0].txt = "bla bla bla";

при этом каким-то образом желательно получать объем каждого массива в отдельности. То есть a[].length = 1,a[][].length=2,a[][][].length=0.

p.s. Темно уже на улице, может и туплю чего не обессудьте))

MrPoma 26.06.2008 02:25

Ну и в чем проблема?

Alex_beginner 26.06.2008 11:29

Здравствуйте uglan!

Мне не совсем понятна целесообразность конструкций:

Цитата:

Код:

a[0] = "aga";
a[0][0]="ugu";
a[0][1]="ugu2";
a[0][1][0].name = "ege";
a[0][1][0].num = 10;
a[0][1][0].txt = "bla bla bla";


В особенности последние строчки.

А вообще многомерный массив можно создать с использованием литерала, пример:

Код:

var a:Array = [["aga","ugu"],["ege","uau","oh"]];
Причем обращение
Код:

a[0]
будет ссылаться не на один единственный элемент массива, а на массив ["aga","ugu"] и поэтому присвоив
Код:

a[0] = "aga"
вы замените массив ["aga","ugu"] на "aga".

Теперь, если Вы хотите вложить объект (скажем инстанцию Object) в трехмерный массив лучше сделать это так:

Код:

a[0][0][0] = {name:"ege", num:10, txt:"bla bla bla"}
или так

Код:

a[0][0][0] = new Object();
a[0][0][0].name = "ege"
...
...


uglan 26.06.2008 11:38

Проблема в том что даже двумерный массив такого вида ничего не возвращает:

Код:

var a=new Array();

a[0] = "aga";
trace(a[0]);

результат "aga"

Код:

a[0][0] = "ugu"
trace(a[0][0]);

результат undefined

Код:

a[0][0][0] = new Object();
a[0][0][0].name = "ege"

trace(a[0][0][0].name);

результат undefined

uglan 26.06.2008 11:47

А подобный вид
Код:

var a:Array =new Array();

a[0] = "aga";
trace(a[0]);

a[[0],[0]] = "ugu"
trace(a[[0],[0]]+"/"+a[[0],[0]].length);

не корректно возвращает длинну вложенного массива. В данном случае 3. То же значение вернет trace(a[0].length);
-------------------------------------
Объясню для чего мне это нужно. Мне нужна некая трехуровневая структура иерархического типа в которой будут храниться данные. Причем класс на каждом уровне может быть разный.
Пример:

FirstLevel1(name - "FLevel1")
--SecondLevel1(name - "SLevel1")
----ThirdLevel1(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
----ThirdLevel2(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
----ThirdLevel3(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
----ThirdLevel4(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
--SecondLevel2(name - "SLevel2")
----ThirdLevel1(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
----ThirdLevel2(name = "TLevel1",desc="desc TLevel1",index="1" и т.д.)
--SecondLevel2
--SecondLevel3

Структура создается динамически, поэтому изначально нельзя определить размер массива.

Alex_beginner 26.06.2008 11:56

uglan! Вы поймите следущее. Если Вы создали массив это не значит, что в каждой ячейке его можно создать свойство и присвоить ему значение. Это можно сделать только после создания инстанции Object в ячеке массива.

Сделайте так:

в этом примере
Цитата:

Код:

a[0][0] = "ugu"
trace(a[0][0]);


поменяйте так:
Код:

var a:Array = [[],[]];
a[0][0] = "ugu"
trace(a[0][0])

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

uglan 26.06.2008 12:00

А вот так не работает.
Код:

var a:Array = [[],[],[]];
a[0][0][0] = "ugu"
trace(a[0][0][0])

undefined

И опять таки вот такой код
Код:

var a:Array = [[],[]];
a[0][0] = "ugu"
trace(a[0][0].length);

Не возвращает нужного значения.

alexcon314 26.06.2008 12:03

uglan, а почему вы не хотите использовать xml для хранения того, что вы называете
"трехуровневая структура иерархического типа "?

uglan 26.06.2008 12:05

Мне кажется массив удобнее(без заморочки с кучей childNodes), если он вообще может работать с тройной структурой.

qazwsx 26.06.2008 12:06

Код:

var a:Array = [];
a[0] = [];
a[0][0] = ':Q';
trace(a[0][0]);



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

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