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