PDA

Просмотр полной версии : Как массив проверить на наличие элемента?


Rmike
16.12.2001, 15:21
Надо проверить массив, есть ли там определенное число. Кто подскажет? Где-то мне попадался способ без цикличной проверки.

ish
16.12.2001, 18:05
a=[1,2,3,4,5,6,7,8,9,0];
x=8;
for(i=0;i<a.length;i++) {
if(a[i]==x) {
trace("!!!");
break;
}
}

Egoritch
16.12.2001, 19:21
Где-то мне попадался способ без цикличной проверки...


Subj. В SQLe ;)
а если найдёшь такое на флэше, ц, джабе - плз, зымыль и мне ;)

Barmaglot
16.12.2001, 19:31
Без проверки всех элементов подряд можно обойтись ТОЛЬКО если массив упорядочен.

john
16.12.2001, 20:20
Самый лучший способ это метод indexOf, который нужно создать.
Лучше пока ничего не придумано. Но он опять же использует цикл.

indexOf нужно делать самому.




Array.prototype.indexOf = function(searched)
{
for(var indexOf_i=0;indexOf_i<this.length;indexOf_i++)
{
if(searched==this[indexOf_i])
{
return indexOf_i;
}
}
return -1;
}

//::: EXAMPLE :::

arr = [1,2,3,4,5,6,7,8,9,10];

if(arr.indexOf(3) != -1)
{
trace ("YES!!!")
}

Barmaglot
16.12.2001, 21:18
Перебором искать хорошо, если у вас массив длиной 10 - 50; а если он большой и искать нужно часто, то лучше его сначала отсортировать, а затем уже искать в нем с помощью бинарного поиска или еще как кому что нравится.
Алгоритмы и сортировки и поиска довольно простые, любой сможет реализовать. К тому же есть всякие доступные библиотеки, оттуда можно их взять и переделать для флэша.
Че больше размер массива, тем сильнее разница в скорости.
Для массива чисел длиной 1000 разница будет примерно раз в 50-200;

Iv
16.12.2001, 21:44
вот подумал... и мысля посетила... (страно это :D )

а не быстрее ли получится, если массив .toString()
а потом строку .indexOf( searchString, fromIndex );

сам не пробовал, но может в этом есть смысел? :p

Iv
16.12.2001, 22:00
попробовал...
смысла нет :mad: :mad: :mad: :mad: :mad:

john
17.12.2001, 01:39
если содержание массива статично и нужно часто обращаться к нему на предмет проверки данных могу предложить такое решение, сам иногда пользуюсь.

сначала создадим объект которые содержит поля с буливыемыми значениями.


arr = [0,1,2,3,4,5,6,7,8,0];
source_arr_object = {};

for (var i=0;i<arr.length;i++)
{
source_arr_object[arr[i]] = true;
}


при необходимости узнать наличия значения

делаем так


if(source_arr_object[значение] == true)
{
trace ("YES!")
}


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

Но когда массив статичный и значения строки и цифры, то имеет смысл....