var side1 = new Array();
side1[0] = new Array (26,9,'...');
side1[1] = new Array (26,9,'...');
side1[2] = new Array (21,5,'...');
...
и т.д.
JavaScript, массивы
Вот застрял, не могу сообразить, может кто подскажет :)
Есть массив вида:
Код:
где 1 и 2 в массиве - координаты. Надо как-то выбрать количество по определенным заданным координатам.
К примеру надо узнать кол-во записей в массиве для 26,9. А в идеале - создать новый массив со списком 3-их параметров.
Заранее спасибо всем кто откликнется!
Перебором.
К слову: массив можно вывести в любом удобном формате, разбить на несколько и т.д., лишь бы организовать нужный поиск
Сейчас она у вас такая
Код:
side1[ID_NUMBER] = {x, y, ДАННЫЕ}
а можно сделать такой:
Код:
side1[x][y] = {ДАННЫЕ1, ДАННЫЕ2, ...}
Получится трехмерный массив. Работа будет выглядеть так:
Код:
myElements = side1[26][9];
И в myElements уже будут все записи для данных координат. Странно что вы сразу так не сделали.
так сразу и сделали :) Но дело в том, что выбираются не все координаты, а только определенные, поэтому структура массива получается не последовательная и браузер ругается. Т.е. будет:
Код:
side1[0][0] = ...
side1[5][8] = ...
и т.д.
side1[5][8] = ...
и т.д.
Что конкретно пишет?
Заранее спасибо.
Код:
side1['x5']['y8'] = ...
Оставлю на крайний случай :)
Ну пишите по результатам экспериментов
Все можно, если осторожно. Ищите TreeMap-у под ЖабаСкрпт, если не найдете, то свою можно написать. Если даже не на дереве (сбалансировать дерево еще надо уметь), то хотяби хеш-мапку.
Каким боком сюда деревья нужны? К тому же построение и поиск по дереву из нескольких тысяч узлов да еще на JavaScript... Медаль за быдлокодинг дадут, никак не иначе.
Цитата: RussianSpy
Каким боком сюда деревья нужны? К тому же построение и поиск по дереву из нескольких тысяч узлов да еще на JavaScript... Медаль за быдлокодинг дадут, никак не иначе.
Да ну, а я всегда думал, что построение и поиск по сбалансированіх деревях - дело очень быстрое и на медленных интеретрепаторах очень полезное. А понятие быдлокода ИМХО скорее применимо к неуклюжей реализации любой затеи.
С таким же успехом можно утверждать что реализация бинарного поиска к JavaScript не применима.
ЗЫ, хотя может схожые идеи уже заложены в принципи индексацыи ДжаваСкрипт массивов - тогда ето просто велосипед.
А зачем нужно строить дерево и проводить по нему поиск если можно просто обратиться к нужному элементу массива и подсчитать количество элементов в нем?? Именно это и есть быдлокод - использование ненужных и неэффективных средств в ненужных местах.
Цитата: RussianSpy
А зачем нужно строить дерево и проводить по нему поиск если можно просто обратиться к нужному элементу массива и подсчитать количество элементов в нем?? Именно это и есть быдлокод - использование ненужных и неэффективных средств в ненужных местах.
Если ваш такой подход будет производительным, то он лутше моего однозначно.
Если вы внимательно прочитаете топик с самого начала и вникнете в проблему, то вам станет ясно, что проще и быстрее тут в принципе быть ничего не может.
Сколько памяти выделится, как происходит поиск елемента в массиве по индексам.
Те же ассоциативные массивы, которые я предложил в качестве одного из решений, скорее ближе к объектам, чем к массивам. И в данном конкретном случае простое получение массива значений по координатам точки в двумерном массиве, будет быстрее и проще какого-либо другого способа.
2 RussianSpy:
еще не успел попробовать, не до того. Но обязательно отпишусь.
Цитата: Franky
как-то не в кассу получилось :)
Ну дык :). Кто ж его знает, ети интертрепаторы. Я подумал что при целочисельных индексах оно память под все выдаст.
Ну загнался :)
Не работает элементарная вещь:
Код:
<script language="JavaScript" type="text/javascript">
var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>
var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>
Cannot convert undefined or null to Object
Цитата: Franky
вообще полный зад :(
Не работает элементарная вещь:
Cannot convert undefined or null to Object
Не работает элементарная вещь:
Код:
<script language="JavaScript" type="text/javascript">
var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>
var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>
Цитата:
Для массивов нескольких размерностей конструктор не предусмотрен. Но их можно создавать, объявляя каждый элемент одномерного массива снова одномерным массивом. Полученные элементы уже двумерного массива можно снова объявить как одномерные массивы, создав, таким образом, трехмерный массив и т. д. Следующий код создает двумерный массив размерности (4 4):
a = new Array()
for (i=0; i < 4; i++) {
a = new Array()
for (j=0; j < 4; j++) {
a[j] = значение
}
}
Обратите внимание, что при ссылке на элементы такого массива индекс каждого размерения элемента следует задавать в самостоятельных квадратных скобках: сначала в квадратных скобках указать первый индекс, затем в других квадратных скобках второй индекс и т. д.
a = new Array()
for (i=0; i < 4; i++) {
a = new Array()
for (j=0; j < 4; j++) {
a[j] = значение
}
}
Обратите внимание, что при ссылке на элементы такого массива индекс каждого размерения элемента следует задавать в самостоятельных квадратных скобках: сначала в квадратных скобках указать первый индекс, затем в других квадратных скобках второй индекс и т. д.
Результат:
Код:
<script language="JavaScript" type="text/javascript">
side = new Array();
side['26_9'] =2;
...
</script>
side = new Array();
side['26_9'] =2;
...
</script>
работает - и нехай с ним.
Да в общем и не факт что работать будет медленнее, чем с числами.