Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как быстро проверить есть ли в массиве нужная строка? (https://javascript.ru/forum/misc/30812-kak-bystro-proverit-est-li-v-massive-nuzhnaya-stroka.html)

Почемучкин 16.08.2012 18:47

Как быстро проверить есть ли в массиве нужная строка?
 
Подскажите способ или алгоритмик как эффективно по скорости проверить есть ли строка в массиве - это массив md5 хэшей?
Или как организовать проверку существует ли наш md5 хэш в списке?

Severtain 16.08.2012 19:06

Вы знакомы с Хеш-таблицами! ?

kobezzza 16.08.2012 19:25

Стандартный, но довольно быстрый способ (в древних браузерах нуно писать самому)
['a', 'b', 'c'].indexOf('c'), ну а вообще лучше для таких вещей юзать хешик.

melky 16.08.2012 20:10

Цитата:

Сообщение от Почемучкин (Сообщение 198058)
Подскажите способ или алгоритмик как эффективно по скорости проверить есть ли строка в массиве - это массив md5 хэшей?
Или как организовать проверку существует ли наш md5 хэш в списке?

проверка с помощью "in" работает молниеносно. но для этого придётся перевести данные в другой формат.

Почемучкин 17.08.2012 06:41

Простой IndexOf не подходит, т.к. в большом массиве частые проверки будут слишком медленными. Нужно как в базе данных - нахождение ключа по быстрому алгоритму. Но в данном случае не таблица, а просто список md5 строк.

Цитата:

Сообщение от melky (Сообщение 198086)
проверка с помощью "in" работает молниеносно. но для этого придётся перевести данные в другой формат.

В какой другой формат?

melky 17.08.2012 07:22

Цитата:

Сообщение от Почемучкин (Сообщение 198207)
В какой другой формат?

из массива - в объект, где ключ - md5, значение - null.

Почемучкин 17.08.2012 08:05

Цитата:

Сообщение от melky (Сообщение 198208)
из массива - в объект, где ключ - md5, значение - null.



var md5 = "790ae61799df4458e8a66aec1dd51e9c";

hashes.push( {md5:null} );
Так?


Не получается:

var hashes=[];
var md5 = "790ae61799df4458e8a66aec1dd51e9c";

hashes.push( {md5:null} );

alert( md5 in hashes );
выдает false

Aetae 17.08.2012 08:47

Цитата:

Сообщение от Maxmaxmахimus (Сообщение 198211)
только не null а undefined

С чего бы?

null, undefined, false, true - это всё объекты на которые будет храниться ссылка.

nerv_ 17.08.2012 09:31

Почемучкин,
var hash = {};
var md5 = "790ae61799df4458e8a66aec1dd51e9c";

hash[ md5 ] = null;

alert( md5 in hash );
// or
alert( hash[ md5 ] );


Цитата:

Сообщение от Aetae
null, undefined, false, true - это всё объекты на которые будет храниться ссылка.

объекты?

Aetae 17.08.2012 11:03

Цитата:

Сообщение от nerv_ (Сообщение 198218)
Почемучкин,
var hash = {};
var md5 = "790ae61799df4458e8a66aec1dd51e9c";

hash[ md5 ] = null;

alert( md5 in hash );
// or
alert( hash[ md5 ] );



объекты?

В js всё объекты.)
Но данные вещи ведут себя именно как js обекты, т.е. не создаётся новых экземпляров и не присваивается значение - только ссылка.)
Т.е. память лишня не тртится.


Часовой пояс GMT +3, время: 23:22.