Лучшее общее назначение - особенно короткие массивы (1000 элементов или меньше) и кодеры, которые не уверены, какие оптимизации лучше всего соответствуют их потребностям.
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
Как уже упоминалось, grep проходит через все значения, даже если первое значение в массиве совпадает. Это правда, однако grep все еще чрезвычайно быстр для большинства случаев . Если вы говорите о коротких массивах (менее 1000 элементов), то большинство алгоритмов в любом случае будут довольно быстрыми. Если вы говорите об очень длинных массивах (1 000 000 элементов), то grep работает достаточно быстро независимо от того, является ли элемент первым, средним или последним в массиве.
Случаи оптимизации для более длинных массивов:
Если ваш массив отсортирован , используйте «бинарный поиск».
Если один и тот же массив неоднократно ищется , сначала скопируйте его в хеш, а затем проверьте хеш. Если проблема связана с памятью, переместите каждый элемент из массива в хеш. Больше памяти эффективно, но разрушает исходный массив.
Если одни и те же значения неоднократно ищутся в массиве, лениво создайте кеш. (так как каждый элемент ищется, сначала проверьте, был ли результат поиска сохранен в постоянном хэше. Если результат поиска не найден в хэше, то ищите массив и поместите результат в постоянный хеш, чтобы в следующий раз мы найдите его в хэше и пропустите поиск).
Примечание: эти оптимизации будут быстрее только при работе с длинными массивами. Не переусердствуйте.