PDA

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


goder
06.04.2007, 23:20
Приветствую всех втала такая проблема может кто подскажет или кто то сталкивался
Мне надо сделать функцию которая будет просматривать массив с n вложении массиввов тее мсив может быть такой для примера
var a1:Array=new Array;
var a2:Array=new Array;
var a3:Array=new Array;
a3[0]=1;
a3[1]=1;
a3[3]=1;
a2[0]=a3;
a2[1]=a3;
a1[0]=a2;
a1[1]=a2;

уровень вложености не известен вот не пойму как организовать вункцию чтоба она просмотрела весь массив по элементам устроит решение если даже пойдет циклический перебор
помогите плиз



если ктото спросит ля чего это нужно отвечу будут приходить данный в xml формате надо правильно его разобрать:(
тее вложеность может быть на уровне 120 елементов

etc
07.04.2007, 00:54
Рекурсия (http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F#.D0.A0.D0.B5.D0.BA.D1.83.D1.80.D1.81.D0.B8.D1.8F_.D0.B2_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0 .BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B8).

DanQuimby
07.04.2007, 08:51
__etc как всегда краток :)
goder если не понятно , пиши в личку обьясню :)
более доходчивей :) у меня даже где то исходничек завалялся
по данной теме

Kikasso
07.04.2007, 10:54
120 уровней - это очень много. Так ли надо его разбирать?

etc
07.04.2007, 14:32
Рекурсия работает до 256 уровней.

goder
10.04.2007, 02:21
ДА я пишу он лайн игру в бою все параметры у меня будут приходить в xml Вот и может в неготорых местах вложение до 120 уровня :)
зато быстрый способ я перед отправкой xml пакую его в swf

Kikasso
10.04.2007, 02:39
Есть вариант - Flash Remoting.

etc
10.04.2007, 03:03
И чего там такого может быть до 120-го уровня, а?

goder
10.04.2007, 16:38
И чего там такого может быть до 120-го уровня, а?
Да уменя туда передаются параметры все я на космическую тему пишу и туда уходят параметры о корабла о состояние каждой веши и т.п
да кстати я написал еще быстрее способ я так думаю может кому тоже поможет
Позже перекатаю в отдельный клась и сделаю небольшое FAQ
вот кодик работает на LoadVars
но делает конвертацию
в структуру flash
пока работает конвертация в массивы
распознание типа переменной пока три типа(основные): Objeckt (тее ссылка), String, Integer
В массивах допускаяется вложенность


var js:LoadVars = new LoadVars();
var array_string:Array = new Array();
js.onData = function(src:String)
{
var tekst:String = src;
if (tekst == undefined)
{
trace("Ошибка загрузки данных.");
return;
}
else
{
js.decode(src);
tekst = this["<"];
var formir:Array = tekst.split(";");
for (var i = 0; i < formir.length; i++)
{
array_string[i] = crate_class_peremen(formir[i]);
}
for (var i = 0; i < array_string.length; i++)
{
if (array_string[i].class_peremen == "Object" && (array_string[i].value_peremen == "Array()" || array_string[i].value_peremen == "array()" || array_string[i].value_peremen == "[]"))
{
set(array_string[i].name_peremen, new Array());
_root[array_string[i].name_peremen][0] = "aa";
}
else
{
if (array_string[i].index_peremen <> "" && array_string[i].class_peremen <> "Object")
{
_root[array_string[i].name_peremen][Math.round(array_string[i].index_peremen)] = array_string[i].value_peremen;
}
else
{
if (array_string[i].class_peremen == "Object")
{
if (array_string[i].index_peremen <> "")
{
//trace(array_string[i].value_peremen)
_root[array_string[i].name_peremen][Math.round(array_string[i].index_peremen)] = _root[array_string[i].value_peremen];
}
else
{
set(array_string[i].name_peremen, _root[array_string[i].value_peremen]);
}
}
else
{
if(array_string[i].class_peremen =="integer")
{
set(array_string[i].name_peremen, Math.round(array_string[i].value_peremen));
}
else
{
set(array_string[i].name_peremen, array_string[i].value_peremen);
}
}
}
}
}
//trace(asd);
}
delete array_string
delete js
};
js.load("test.html");
function crate_class_peremen(str:String)
{
var contruct_var:Array = new Array();
// тип переменой
contruct_var["class_peremen"] = "";
// имя переменной
contruct_var["name_peremen"] = "";
//значение переменной
contruct_var["value_peremen"] = "";
//индекс если массив
contruct_var["index_peremen"] = "";
var peremen:String = new String();
var znac:String = new String();
var class_peremen:String = new String();
var index = "";
var Tmp:String = new String();
ch = 0;
ind = 0;
for (var s = 0; s < str.length; s++)
{
Tmp = str.charAt(s);
if (Tmp == "\\")
{
}
else
{
if (Tmp == "\n" || Tmp == "\r")
{
Tmp = "";
}
else
{
if (ch == 0)
{
if (str.charAt(s) == "=")
{
ch = 1;
Tmp = "";
}
else
{
if (str.charAt(s) == "[")
{
ind = 1;
Tmp = "";
}
else
{
if (ind == 1)
{
if (str.charAt(s) == "]")
{
ind = 0;
Tmp = "";
}
else
{
index = "" + index + Tmp;
}
}
else
{
peremen = peremen + Tmp;
}
}
}
}
else
{
znac = znac + Tmp;
}
}
}
}
string = 0;
object = 1;
integer=0;
tmp_str = "";
if (znac.charAt(0) == "\"" && znac.charAt(znac.length - 1) == "\"")
{
string = 1;
object = 0;
znac = znac.slice(1, znac.length - 1);
}
if (isNaN(znac)==false)
{
string = 0;
object = 0;
integer=1;
}
if (string == 1)
{
class_peremen = "string";
}
if (integer == 1)
{
class_peremen = "integer";
}
if (object == 1)
{
class_peremen = "Object";
}
// тип переменой
contruct_var["class_peremen"] = class_peremen;
// имя переменной
contruct_var["name_peremen"] = peremen;
//значение переменной
contruct_var["value_peremen"] = znac;
//индекс если массив
contruct_var["index_peremen"] = index;
return contruct_var;
}


А вот какой текст должен у вас генерить рнр или вы сами тут без разницы главное чтобы начинался с такого знака "<="

<=
asd=array();
asd[0]="s";
asd[1]="\"s\"";
as="\"sd\"";
asd[2]=as;
newar=[];
newar[0]="qwe";
newar[1]="qwsse";
asd[3]=newar;
sd=as;
inter=456878;




Думаю тут понятно ну и еще
обязательно каждая строка должена заканчиватся на ";"

etc
10.04.2007, 17:28
Мне кажется, у вас явная ошибка в проектировании и недостаток знания языка.

goder
10.04.2007, 17:33
Мне кажется, у вас явная ошибка в проектировании и недостаток знания языка.
Почему ????

etc
10.04.2007, 17:44
Потому что предположение.
Если такие вот огромные XML получаются, то это явная ошибка проектирования.

goder
10.04.2007, 18:05
Потому что предположение.
Если такие вот огромные XML получаются, то это явная ошибка проектирования.
Никаких ошибок
это так задумано :)
столько параметров всяких
иначе он был бы в десять раз больше уж поверте что что а БД я проиктировать могу, просто с флешем тока начал знакомится :)
Такчто не судите по оберке пожалуста ;)

etc
10.04.2007, 18:06
просто с флешем тока начал знакомится :)
Мое предположение оказалось верным, тем не менее.

goder
10.04.2007, 18:11
Мое предположение оказалось верным, тем не менее.
на счет флеша да
есть некоторые нюансы которые приходится подизучать
кстати насчет моего класса то что написал выше он шустрее обмен делает чем через xml
только что проверил

etc
10.04.2007, 18:13
1. А запятые в тексте расставлять вас в школе не научили?
2. У вас не класс, а пара функций.

goder
10.04.2007, 18:21
1. А запятые в тексте расставлять вас в школе не научили?
2. У вас не класс, а пара функций.
Как-то учили, но позабыл.
Скоро будет класс , сейчас согласен пара функция, но я номереваюсь подделать ее для универсального обмена .

DanQuimby
11.04.2007, 02:33
__etc ну зачем же так влоб.
Просто многие не хотят учиться на чужих ошибках.
А пытаются смастерить собственные "грабли" и на них пару раз с веселой улыбкой наступить(а кому то это нравиться делать это с маниакальным постоянством ).
А так в профилактических целях. Как говорят ПУЩАЙ...
goder попробуй для начал СПРОЕКТИРОВАТЬ проект или просто на "бумажке" или например в UML, а уже потом идти сюда и выдавать свою идею и способы ее реализации.
Это поверь лучшее что я могу тебе посоветовать.

Потому что предположение.
Если такие вот огромные XML получаются, то это явная ошибка проектирования.
Еще раз повторюсь.Моя работа (програмист С++) состоит в создании (на последней стадии) интернет-клиент(интернет казино), потому я и знаю не понослышке о минимилизации запросов и ответов от сервера.
Так что просто бери за веру. БОЛЬШИЕ ПАКЕТЫ НЕ ФАКТ ЧТО ДОЙДУТ.
А это "лаги" .:umnik2: