PDA

Просмотр полной версии : Помогите с массивами.


AlexSm
06.12.2001, 14:05
Надо на ActionScripte такое написать:

butts="1,All About Flash,,;1_1,Flash,,;1_2,Macromedia,,;1_3,Design,,;1_4,My Site Link,http://mysite.com;2,All About Perl,,;3,All About CGI,,;"
ConvertAndCreate(butts);

function ConvertAndCreate (strData) {
arrData = strData.split(";");
// Разделим на куски в которых лежат толи кнопки толи субменюхи
arrData.reverse();
for (i in arrData){
ItemData = arrData[i].split(",");
trace ("=> "+ItemData[0]+" => "+ItemData[1]+" => "+ItemData[2]);
Number = ItemData[0].split("_");
// Если есть линк - то это кнопка линковая если нету, то субменюха
if (ItemData[2] != ""){
trace("Link" );
}
else{
trace("Submenu" );
}

}

}

Как видно, из верхней сроки, идея в том, что имена кнопок и субменюх первого эшелона
1 link
2 link
3 SUBMENU
4
5
Второго эшелона X_1,X_2,X_3, тоесть допустим 3-SUBMENU
тогда внутри
3_1 link
3_2 SUBMENU
3_3 link

Если третий взять то 3_2_1 3_2_2 и т.д

Теперь хочется сделать массив Buttons
так чтобы
Buttons[1][0] = "http://...." //Link 1
Buttons[2][0] = "http://...." //Link 2
Buttons[3][0] = Ссылка намассив где все точно так-же. //Submenu

Buttons[1][1] = "mc1" //Имя мувика
Buttons[2][1] = "mc2"
Buttons[3][1] = "mc3"

Buttons[1][2] = _x
Buttons[2][2] = _x
Buttons[3][2] = _x

Ну и так далее

Идея ясна я думаю.
Я в Актион скрипте не силен. Только пытаюсь его на понт взять. Может кто наставит на путь истинный.

Или здесь вообще надо подругому делать

Спасибо!

gOloVasTicK '~
06.12.2001, 14:20
В общем довольно верно мыслишь :) Должно работать.
Иногда и на понт получается :D

AlexSm
06.12.2001, 14:26
Как массив в массив положить ?
Тоесть есть массив К[][],
как его сделать доступным из Т[i][t] ?
Есть способ ?

gOloVasTicK '~
06.12.2001, 14:34
Способ есть, его не может не быть :D

a=new Array();
a[0]=new Array();
a[0][0]=new Array();

a[0][0][0]="Yeeaaah! 3d array";

Правда для увеличения массива каждый раз нуна будет писать:

a[1]=new Array();
a[2]=new Array();

AlexSm
06.12.2001, 15:13
А что-то вроде указателей есть тут ?
Я вот извратился, написал через eval, но не работает.
Указателей хочу!


butts="1,All About Flash,,;1_1,Flash,,;1_2,Macromedia,,;1_3,Design,,;1_4,My Site Link,http://mysite.com;2,All About Perl,,;3,All About CGI,,;"
ConvertAndCreate(butts);

function ConvertAndCreate (strData) {
Buttons=new Array();
z = 0;
arrData = strData.split(";");
arrData.reverse();
for (i in arrData){
ItemData = arrData[i].split(",");
trace ("=> "+ItemData[0]+" => "+ItemData[1]+" => "+ItemData[2]);
Number = ItemData[0].split("_");
mas="";
for (n in Number){
mas=mas+"["+Number[n]+"]";
}

trace("MAS="+mas);

if (ItemData[2] != ""){
trace("Link" );
eval("Buttons"+mas)=new Array();
eval("Buttons"+mas+[0])="Link";
}
else{
trace("Submenu" );
eval("Buttons"+mas)=new Array();
eval("Buttons"+mas+[0])="Submenu";
}

}

trace("===========Res==============");
trace(Buttons.length); // <-- А размер равен нулю..... Пачаму
for (i=1; i<Buttons.length;i++){
trace ("["+i+"] "+Buttons[i][0]);
}
}

gOloVasTicK '~
06.12.2001, 15:22
Указатель есь :)

a=new Array(1,2,3);
r={};
r=a;
trace(r[0]);
trace(r[1]);
trace(r[2]);
r[0]="Yeaaah! It's pointer! YO!";
trace(r);

AlexSm
06.12.2001, 17:53
a=new Array();
t=new Array();
c={}; // Это что, будет означать, что c - ссылка ?
c=t;
a[0] =c; // в данном случае, a[0] - ссылка на массив t ?
// теперь хочу заполнить массив, лежащий в a[0]
p={};
p=a[0];
p[0]="tralalalalala";

//======================= Хочу прочитать

r={};
r=a[0];
trace(r[0]);

Вроде работает. Но ссылки ли это ?


А ссылку на ссылку можно делать ?
Я пытаюсь в функцию ссылку передать и ек.
и как понимать r={}

gOloVasTicK '~
06.12.2001, 18:36
variables = {}; == variables = new Object();
Так просто писать короче :)
Можно вообще без объявления обойтись, но эт не правильно ;) :p

AlexSm
06.12.2001, 20:25
Eval () ???

Вопрос такой.
Есть у меня мувик MC
хочу сделать такую весч:

myCommand="_root.MC._x=100";
eval(myCommand);

Пачаму НЕ_Работает ?
Как надо, чтобы заработалО ?

Спасибо!

gOloVasTicK '~
06.12.2001, 20:53
У меня пашет в таком виде:
my = "_root.x";
eval(my)=100;

AlexSm
07.12.2001, 11:14
Так работает :
txt="_root.mc";
eval(txt)._x=100;

А хочется чтобы вся строка
ТХТ могла бы выполнится.
тоесть
command("_root.mc","_x=100");

function command(MC,COM){
eval (MC+"."+COM);
}

Найти применение этому легко. А вот можно ли сделать ?