Просмотр полной версии : как измерить длинну многомерного массива в 7?
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
trace(arr.length);
в 6 версии этот код работал.
в 7 trace выдаёт 0.
подскажите, как в 7 измерить длинну многомерного массива ?
вот это извращение :eek:
... эта одномерный массив с ключами |двумерными массивами| =))))
это точно...
arr = new Array([],[]);
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
trace(arr.length);
или так
arr = new Array([1,2],[3,4]);
trace(arr.length);
вот это извращение :eek:
... эта одномерный массив с ключами |двумерными массивами| =))))
Ето асоциативный масив с ключами одномерными масивами.
а если их больше?
arr = new Array([],[]);
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
arr[2][0] = 3;
arr[2][1] = 4;
trace(arr.length);
количество строк динамичное.
нужно узнать сколько их.
вот это извращение :eek:
... эта одномерный массив с ключами |двумерными массивами| =))))
чем тебе такой синтаксис непонравился?
Ето асоциативный масив с ключами одномерными масивами.
ага, я это и хотел сказать )
чем тебе такой синтаксис непонравился?
хотя бы тем что .length не считает элемент с ключем |миссив| за элемент.... "а он есть"(с)...
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
trace('length = '+arr.length);
//
var len = 0;
for (var g in arr) {
len++;
}
trace('length = '+len);
почему же 6 версии arr.length считал правельно?
попробуй мой код в 6 запусти
толку то от этого?
вот пример (для 6-ки)
arr = new Array ();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
trace (arr.length);
for (i = 0; i < arr.length; i++) {
trace (arr[i]);
}
попробуй мой
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
for (i=0; i<arr.length; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]);
}
trace(arr.length);
в 6 arr.length=3
в 7 arr.length=0
почему?
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
вапще то и 6ка и 7ка врут, элементов то всего 6
элементов 6, но шестёрка понимает что считать надо только строчки
6ка наверное скорее не понимала,
а просто считала уникальные значения первых элементов ключей(массивов),
а 7ка ваще плюнула на это дело Ж)
какой синтаксис должен быть, на твой взгляд?
Тебе двухмерный массив нужен или что?
это не принципиально, допустим 10.
высота динамическая
массив в массив пихать неохото так как система уже сделана.
нужно будет переделывать.
но появилась необходимость перевести её на семёрку.
тебе можно сделать что то типа
...может тормозитьarr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
//
Array.prototype.len = function() {
var l = 0;
var a = [];
for (var g in this) {
//trace('key['+g+'] type['+typeof (g)+'] val['+this[g]+'] type['+typeof (this[g])+']');
if (typeof (this[g]) != 'function') {
if (typeof (g) == 'string') {
var c = g.split(',', 2)[0];
} else {
var c = g;
}
if (a[c] == undefined) {
l++;
a[c] = true;
}
}
}
return l;
};
//
trace(arr.len());
особенности массивов =)a = [1, 2, 3];
trace('len='+a.length+' a=['+a+']');
//
a[6] = 6;
trace('len='+a.length+' a=['+a+']');
//
delete a[6];
trace('len='+a.length+' a=['+a+']');
а вообще такая запись a[[0,1]]=1; приводит к тому что ключ [0,1] конвертируется в строку.aa = [];
aa[[0, 1]] = 1;
for (var g in aa) {
trace(g+' '+typeof (g));
}
а вообще такая запись a[[0,1]]=1; приводит к тому что ключ [0,1] конвертируется в строку.aa = [];
aa[[0, 1]] = 1;
for (var g in aa) {
trace(g+' '+typeof (g));
}
а такая? :)
aa = [];
aa[0] = 1;
aa[1] = 2;
for (var g in aa) {
trace(g+' '+typeof (g));
}
ага :)
кароче строки рулят :rolleyes:
ага :)
кароче строки рулят :rolleyes:
а зачем таким способом лазить по массиву?
моим способом все данные прекрасно извлекаються без лишних усилий
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
for (i=0; i<arr.length; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]);
}
Если "без лишних усилий", то зачем топик создал?
Если работает в 6-ке, то это не значит, что механизм правильный. В чем ты убедился столкнувшись с проблемой в 7-ке.
в общем пришлось сделать не так красиво, как хотелось бы
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
for (i=0; arr[[i, 1]]!=undefined; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]);
}
напиши какой механизм на твой взгляд правельный
в общем пришлось сделать не так красиво, как хотелось бы
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
for (i=0; arr[[i, 1]]!=undefined; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]);
}
так не пойдет, 2 послений пропадут:
arr = new Array();
arr[[0, 1]] = 1;
arr[[0, 2]] = 2;
arr[[1, 1]] = 3;
arr[[1, 2]] = 4;
arr[[2, 1]] = 5;
arr[[2, 2]] = 6;
//
arr[[7, 1]] = 75;
arr[[7, 2]] = 76;
//
for (i=0; arr[[i, 1]] != undefined; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]);
}
поэтму этот вариант и некрасивый.
но в моём случае он подходит т.к. весь массив заполнен.
если вы считаете что так массивы создавать неправильно.
покажите как надо!
а то третья страница идёт, а я вменяемого кода от вас ещё не увидел
Правильно: делать двухмерные массивы.
Смотри пост №3 данного топика
и что?
посмотри что твой код считает
arr = new Array([],[]);
arr[0][0] = 1;
arr[0][1] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
arr[2][0] = 3;
arr[2][1] = 4;
arr[3][0] = 3;
arr[3][1] = 4;
trace(arr.length);
2, а должно быть 4.
у тебя он ширину считает, а надо длину
arr = new Array([],[],[],[]);
arr = new Array([],[],[],[]);
ты предлогаешь в ширину массив заполять?:)
ты предлогаешь в ширину массив заполять?:)
Не знаю что такое ширина массива, есть длина.
у нас разговор слепой с глухом получаеться.
попробую объяснить подродней.
из базы в виде xml получаю таблицу(3 колонок, число строк переменая).
загоняю данные в массив.
arr = [];
arr[[0, 1]] = 1;
arr[[0, 2]] = "Иван";
arr[[0, 3]] = "Иванов";
arr[[1, 1]] = 2;
arr[[1, 2]] = "Вася";
arr[[1, 3]] = "Васильев";
arr[[2, 1]] = 3;
arr[[2, 2]] = "Петя";
arr[[2, 3]] = "Пертов";
arr[[3, 1]] = 4;
arr[[3, 2]] = "Коля";
arr[[3, 3]] = "Николаев";
// потом возникает необходимость пробежаться по нему в цикле.
// и тут проблема. сколько в нём строк.
for (i=0; i<arr.length; i++) {
trace(arr[[i, 1]]+" "+arr[[i, 2]]+" "+arr[[i, 3]]);
}
ясно?
Все давным давно все ясно. Это ты ни как не можешь понять.
Показываю на пальцах:
xmlA = new XML ("<a><b><c q='1'/><c q='Иван'/><c q='Иванов'/></b><b><c q='2'/><c q='Вася'/><c q='Васильев'/></b><b><c q='3'/><c q='Петя'/><c q='Пертов'/></b><b><c q='4'/><c q='Коля'/><c q='Николаев'/></b></a>");
xmlA.ignoreWhite = true;
arr = [];
for (var i = 0; i < xmlA.firstChild.childNodes.length; i++) {
arr[i] = [];
for (var j = 0; j < xmlA.firstChild.childNodes[i].childNodes.length; j++) {
arr[i][j] = xmlA.firstChild.childNodes[i].childNodes[j].attributes.q;
}
}
for (var i = 0; i < arr.length; i++) {
trace (arr[i][0] + " " + arr[i][1] + " " + arr[i][2]);
}
Сеньк!
достаточно былобы вот этого.
arr = [];
arr[0] = [];
arr[0][1] = 1;
arr[0][2] = 2;
arr[0][3] = 3;
Сеньк!
достаточно былобы вот этого.
arr = [];
arr[0] = [];
arr[0][1] = 1;
arr[0][2] = 2;
arr[0][3] = 3;
ты хочешь сказать, что не не знал что:
arr = [1,2]
эквивалентно
arr = []
arr[0] = 1;
arr[1] = 2;
Whatsername
11.11.2005, 16:56
ты хочешь сказать, что не не знал что:
arr = [1,2]
эквивалентно
arr = []
arr[0] = 1;
arr[1] = 2;
Я хочу это сказать. Более того, я совершенно не вникаю, почему так происходит.
UPD: Ну ни фига се, я торможу... Да. Кофе. Срочно.
нет.
я про эту строчку
arr[0] = [];
Whatsername
11.11.2005, 17:00
Но вот я не понимаю в
arr[[0, 1]] = 1;
[0, 1] - преобразуется к строке???
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.