PDA

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


udodddd
02.06.2004, 19:34
Как создать в одном массиве другой.
Как обратиться к этому вложенному массиву.
И еще.
Я тут сначала в поиске посотрел, нашел сообщение, где говориться, что во флеше нет масивов, а то что есть, это так, фигня (это вольное изложение моим языком).
Как это понимать?

udodddd
02.06.2004, 20:05
Ну как обращаться, вроде нашел.
Например:
dod = new Array("dod1","dod2","dod3");
dod[1]=new Array("koko1","koko2","koko3","koko3");
trace(dod[1].length);
trace(dod[1][2]);

Это единственный способ, есть ли еще какие варианты создания, обращения к вложенному массиву?

FreeLander
02.06.2004, 20:21
http://www.flasher.ru/forum/showthread.php?s=&threadid=58350
в конце страницы

udodddd
02.06.2004, 20:27
Спасибо, все понял.

udodddd
02.06.2004, 21:12
Черт. Все равно вопросы остались.
Я лучше конкретно изложу, что мне нужно...
Значит так, сначала создается один массив:

if (success == true) {
for (i=0; i<links.firstChild.childNodes.length; i++) {
class[i] = links.firstChild.childNodes[i].attributes.inf;

потом всякая вигня с ним. Там копируются кнопки и к ним присваиваются разные действия.
А вот затем, мне нужно в каждом из эллементов этого массива сделать еще один массив и присвоить туда значения из xml файла.
То, что я делал нифига не работает. А как сделать правильно, незнаю.

for (z=0; z<links.firstChild.childNodes[i].childNodes.length; z++) {
class[[i][z]] = links.firstChild.childNodes[i].childNodesхz].childNodes[0].childNodes;
trace(class[[i][z]]);
}
}
}
Когда этот скрипт выполняется, выводится значение только первого массива.
Все остальные - undefined.

Вот на всякий случай кусок xml, откуда все это берется:
<links_xml>
<class inf="класс1">
<link>
<link>ссылка1</link>
<info>инфа1</info>
</link>
<link>
<link>ссылка2</link>
<info>инфа2</info>
</link>
...

...
</class>
<class inf="класс2">
...

...
</class>
</links_xml>

artfla$her
03.06.2004, 01:36
Не, этак ты далеко не уедешь... Правильно class[i][z] = значение. К сколь угодно вложенному массиву можно обратиться именно таким образом

myArray = [ [ [ [0, 1], [2, 3] ], [7, 7] ] ]

myArray[0][0][1][0] // значение 2

Т.е. по степени вложенности, скобки друг за другом.
Главное - не запутаться.

FreeLander
03.06.2004, 15:37
Создаёшь массив, каждым из элементов которого является также массив:

class_array = new Array();
for (var i=0; i<10; i++){
class_array[i]=new Array();
}


а потом заполняешь каждый из этих массивов


for (var i=0; i<10; i++){
for (var j=0; j<10; j++){
class_array[i].push(j);
}
}



вместо
class_array[i].push(j);
можно написать
class_array[i][j]=j;

вроде всё..

FreeLander
03.06.2004, 15:41
нет, не всё.
если пользовать push(), то первый цикл не нужен...
вроде так

udodddd
03.06.2004, 18:05
Выглядит понятно.
И просто.
И даже появляются мысли о том, почему же я сам не смог это придумать. Я их гоню прочь.
Благодарю всех за советы.
Спасибо.
Пошел пробовать.