PDA

Просмотр полной версии : Реально ли по значению элемента массива найти его номер в массиве без перебора?


MagicMax
17.01.2002, 14:08
Реально ли и как, если это реально по значению элемента массива найти его номер в массиве без перебора массива в цикле? Просто в массиве куча элементов, бывает даже больше 1000, а перебор всего массива в цикле очень затормаживает работу приложения... Подскажите плиз, если кто знает. :confused:

SPV
17.01.2002, 14:25
А какой тип у элементов массива? И бывают ли одинаковые элементы?

Papa Karlo
17.01.2002, 15:12
mc0,mc1,mc2,mc3 ... mc10000;

temp=new Array();
for(i=0;i<10000;i++){
temp[i]=eval("mc"+i);
}

нумер для mc55==55;

Cerber
17.01.2002, 15:47
только это работать не будет если у тебя данные в виде текста

MagicMax
17.01.2002, 15:53
Есть массив с номерами элементов

ElementsArray[1]="1"
ElementsArray[2]="2"
ElementsArray[3]="3"
ElementsArray[4]="4"

По ходу выполнения приложения некоторые элементы удаляются со сдвигом других элементов вверх и уменьшением размера массива.

ElementsArray[1]="1"
ElementsArray[2]="2"
ElementsArray[3]="4"

Вот и возникла задача без перебора всего массива допустим узнать номер элемента по его значению - например какой номер у элемента со значением "4"? Мы то знаем - ето 3-й номер, а вот как тупому компуперу ето сказать?

Papa Karlo
17.01.2002, 16:01
а вот как тупому компуперу ето сказать?
мицропхоне подключи :D

Имхо, break'нуть цикл, когда temp[i]=="4";
Хоть какая-то экономия :rolleyes:

MagicMax
17.01.2002, 16:24
А если будет удален не один а несколько элементов? :confused: Получается нельзя напрямую по значению элемента узнать его порядковый номер... :(

Cerber
17.01.2002, 16:31
нет...
а зачем тебе удолять элементы массива может их просто обнулять

Papa Karlo
17.01.2002, 16:44
А если какие-то телодвижения привязаны к длине массива, надобно юзать вариаблу на length, которую уменьшать при условном сокращении (обнулевивания элемента) массива.

Cerber
17.01.2002, 16:51
тогда увы...

Papa Karlo
17.01.2002, 17:48
... А при восстановлении значения temp[i] => вариабла++;
Очень даже катит.

MagicMax
18.01.2002, 12:03
Во первых при удалении или обнулении элемента длина массива, как я понимаю никак не уменьшится, и все равно придется в цикле перебирать то же самое количество элементов, кот. было и до удаления.

Я попробую пойти другим путем - сделать не через массив, а через XML. Типа <Element1 ggg="1" /><Element2 ggg="2" /> и т.д. И в XML можно будет и удалять и добавлять элементы, мне кажется через XML будет удобнее.

Про тормоза в XML-е: тормозит когда в XML коде есть пробелы и символы перевода строки. Если XML делать без них то тупинга не будет. Я надеюсь :)

Barmaglot
18.01.2002, 15:12
Отсортируй массив. Тогда можно будет искать каким-нибудь быстрым методом - например бинарным поиском. Для 1000 элементов поиск будет примерно в 50 раз быстрее.