Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

JavaScript, массивы

325
10 февраля 2010 года
Franky
723 / / 10.08.2005
Всем привет!
Вот застрял, не могу сообразить, может кто подскажет :)
Есть массив вида:
 
Код:
var side1 = new Array();
side1[0] = new Array (26,9,'...');
side1[1] = new Array (26,9,'...');
side1[2] = new Array (21,5,'...');
...
и т.д.

где 1 и 2 в массиве - координаты. Надо как-то выбрать количество по определенным заданным координатам.
К примеру надо узнать кол-во записей в массиве для 26,9. А в идеале - создать новый массив со списком 3-их параметров.

Заранее спасибо всем кто откликнется!
13
10 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Перебором.
325
10 февраля 2010 года
Franky
723 / / 10.08.2005
при размерности карты в несколько тысяч? Ню-ню...
К слову: массив можно вывести в любом удобном формате, разбить на несколько и т.д., лишь бы организовать нужный поиск
13
10 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Ну если вы запихиваете в JavaScript массив несколько тысяч элементов, то быстрой работы вы не увидите. Как вариант можно немного оптимизировать структуру

Сейчас она у вас такая
 
Код:
side1[ID_NUMBER] = {x, y, ДАННЫЕ}

а можно сделать такой:
 
Код:
side1[x][y] = {ДАННЫЕ1, ДАННЫЕ2, ...}


Получится трехмерный массив. Работа будет выглядеть так:

 
Код:
myElements = side1[26][9];


И в myElements уже будут все записи для данных координат. Странно что вы сразу так не сделали.
325
10 февраля 2010 года
Franky
723 / / 10.08.2005
"Странно что вы сразу так не сделали."
так сразу и сделали :) Но дело в том, что выбираются не все координаты, а только определенные, поэтому структура массива получается не последовательная и браузер ругается. Т.е. будет:
 
Код:
side1[0][0] = ...
side1[5][8] = ...
и т.д.
13
10 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Браузер не может на это ругаться. Индексы могут быть непоследовательными.
Что конкретно пишет?
325
10 февраля 2010 года
Franky
723 / / 10.08.2005
хм, сейчас точно не скажу... Ладно, попробую еще раз таким макаром, может выйдет.
Заранее спасибо.
13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Ну даже если вас смущает "непоследовательность" индексов массива - можно преобразовать их к строкам (хотя о каких вообще типах можно говорить в JavaScript) и таким образом преобразовать массив к ассоциативному. Конечно, быдлокодерский вариант, но если очень нужно то...
 
Код:
side1['x5']['y8'] = ...
325
11 февраля 2010 года
Franky
723 / / 10.08.2005
уже думал над этим :) Но не хотелось бы опускаться до такого и подобного. Всё же нужна работа с числом.
Оставлю на крайний случай :)
13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Ну пишите по результатам экспериментов
276
11 февраля 2010 года
Rebbit
1.1K / / 01.08.2005
Все можно, если осторожно. Ищите TreeMap-у под ЖабаСкрпт, если не найдете, то свою можно написать. Если даже не на дереве (сбалансировать дерево еще надо уметь), то хотяби хеш-мапку.
13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Каким боком сюда деревья нужны? К тому же построение и поиск по дереву из нескольких тысяч узлов да еще на JavaScript... Медаль за быдлокодинг дадут, никак не иначе.
276
11 февраля 2010 года
Rebbit
1.1K / / 01.08.2005
Цитата: RussianSpy
Каким боком сюда деревья нужны? К тому же построение и поиск по дереву из нескольких тысяч узлов да еще на JavaScript... Медаль за быдлокодинг дадут, никак не иначе.


Да ну, а я всегда думал, что построение и поиск по сбалансированіх деревях - дело очень быстрое и на медленных интеретрепаторах очень полезное. А понятие быдлокода ИМХО скорее применимо к неуклюжей реализации любой затеи.
С таким же успехом можно утверждать что реализация бинарного поиска к JavaScript не применима.

ЗЫ, хотя может схожые идеи уже заложены в принципи индексацыи ДжаваСкрипт массивов - тогда ето просто велосипед.

13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
А зачем нужно строить дерево и проводить по нему поиск если можно просто обратиться к нужному элементу массива и подсчитать количество элементов в нем?? Именно это и есть быдлокод - использование ненужных и неэффективных средств в ненужных местах.
276
11 февраля 2010 года
Rebbit
1.1K / / 01.08.2005
Цитата: RussianSpy
А зачем нужно строить дерево и проводить по нему поиск если можно просто обратиться к нужному элементу массива и подсчитать количество элементов в нем?? Именно это и есть быдлокод - использование ненужных и неэффективных средств в ненужных местах.


Если ваш такой подход будет производительным, то он лутше моего однозначно.

13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Если вы внимательно прочитаете топик с самого начала и вникнете в проблему, то вам станет ясно, что проще и быстрее тут в принципе быть ничего не может.
276
11 февраля 2010 года
Rebbit
1.1K / / 01.08.2005
Я читал. Только в связи со своим незнанием ДжаваСкрипта не совсем понимаю, что случится если координаты будут в розбросе от 1 до 10 000 000, но их будет только 2000 штук
Сколько памяти выделится, как происходит поиск елемента в массиве по индексам.
13
11 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Ничего не будет - в подобных языках типизация лишь видимая. Все переменные, массивы и другие структуры являются объектами (хотя в JavaScript даже функции являются объектами).

Те же ассоциативные массивы, которые я предложил в качестве одного из решений, скорее ближе к объектам, чем к массивам. И в данном конкретном случае простое получение массива значений по координатам точки в двумерном массиве, будет быстрее и проще какого-либо другого способа.
325
11 февраля 2010 года
Franky
723 / / 10.08.2005
да, Rebbit, при всем уважении, как-то не в кассу получилось :)

2 RussianSpy:
еще не успел попробовать, не до того. Но обязательно отпишусь.
276
11 февраля 2010 года
Rebbit
1.1K / / 01.08.2005
Цитата: Franky
как-то не в кассу получилось :)


Ну дык :). Кто ж его знает, ети интертрепаторы. Я подумал что при целочисельных индексах оно память под все выдаст.
Ну загнался :)

325
12 февраля 2010 года
Franky
723 / / 10.08.2005
вообще полный зад :(
Не работает элементарная вещь:
 
Код:
<script language="JavaScript" type="text/javascript">

var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>

Cannot convert undefined or null to Object
242
12 февраля 2010 года
Оlga
2.2K / / 04.02.2006
Цитата: Franky
вообще полный зад :(
Не работает элементарная вещь:
 
Код:
<script language="JavaScript" type="text/javascript">

var side = new Array();
side[26][9][1] = 2;
alert(side[26][9][1]);
</script>
Cannot convert undefined or null to Object



Цитата:
Для массивов нескольких размерностей конструктор не предусмотрен. Но их можно создавать, объявляя каждый элемент одномерного массива снова одномерным массивом. Полученные элементы уже двумерного массива можно снова объявить как одномерные массивы, создав, таким образом, трехмерный массив и т. д. Следующий код создает двумерный массив размерности (4 4):
a = new Array()
for (i=0; i < 4; i++) {
a = new Array()
for (j=0; j < 4; j++) {
a[j] = значение
}
}
Обратите внимание, что при ссылке на элементы такого массива индекс каждого размерения элемента следует задавать в самостоятельных квадратных скобках: сначала в квадратных скобках указать первый индекс, затем в других квадратных скобках второй индекс и т. д.


источник

325
12 февраля 2010 года
Franky
723 / / 10.08.2005
спасибо всем, но сутки секса с этим скриптом сподвигли-таки меня на быдлокод :)
Результат:
 
Код:
<script language="JavaScript" type="text/javascript">
side = new Array();
side['26_9'] =2;
...
</script>

работает - и нехай с ним.
13
12 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Да в общем и не факт что работать будет медленнее, чем с числами.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог