Mejor propósito general: especialmente matrices cortas (1000 elementos o menos) y codificadores que no están seguros de qué optimizaciones se adaptan mejor a sus necesidades.
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
Se ha mencionado que grep pasa por todos los valores, incluso si el primer valor de la matriz coincide. Esto es cierto, sin embargo, grep sigue siendo extremadamente rápido en la mayoría de los casos . Si está hablando de matrices cortas (menos de 1000 elementos), la mayoría de los algoritmos serán bastante rápidos de todos modos. Si está hablando de matrices muy largas (1,000,000 artículos) grep es aceptablemente rápido independientemente de si el artículo es el primero o el medio o el último en la matriz.
Casos de optimización para matrices más largas:
Si su matriz está ordenada , use una "búsqueda binaria".
Si la misma matriz se busca repetidamente muchas veces, cópiela primero en un hash y luego verifique el hash. Si le preocupa la memoria, mueva cada elemento de la matriz al hash. Más memoria eficiente pero destruye la matriz original.
Si se buscan repetidamente los mismos valores dentro de la matriz, construya un caché de forma perezosa. (a medida que se busca cada elemento, primero verifique si el resultado de la búsqueda se almacenó en un hash persistente. Si el resultado de la búsqueda no se encuentra en el hash, luego busque la matriz y coloque el resultado en el hash persistente para que la próxima vez búscalo en el hash y salta la búsqueda).
Nota: estas optimizaciones solo serán más rápidas cuando se trate de matrices largas. No lo optimices en exceso.