Melhor finalidade geral - matrizes especialmente curtas (1000 itens ou menos) e codificadores que não têm certeza de quais otimizações melhor atendem às suas necessidades.
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
Foi mencionado que o grep passa por todos os valores, mesmo que o primeiro valor na matriz corresponda. Isso é verdade, porém o grep ainda é extremamente rápido na maioria dos casos . Se você estiver falando de matrizes curtas (menos de 1.000 itens), a maioria dos algoritmos será bastante rápida. Se você está falando de matrizes muito longas (1.000.000 de itens), o grep é aceitavelmente rápido, independentemente de o item ser o primeiro, o meio ou o último da matriz.
Casos de otimização para matrizes mais longas:
Se sua matriz estiver classificada , use uma "pesquisa binária".
Se a mesma matriz for repetidamente pesquisada várias vezes, copie-a primeiro para um hash e depois verifique o hash. Se a memória for uma preocupação, mova cada item da matriz para o hash. Mais memória eficiente, mas destrói a matriz original.
Se os mesmos valores forem pesquisados repetidamente na matriz, crie um cache preguiçosamente. (à medida que cada item é pesquisado, verifique primeiro se o resultado da pesquisa foi armazenado em um hash persistente. se o resultado da pesquisa não for encontrado no hash, pesquise na matriz e coloque o resultado no hash persistente para que da próxima vez encontre-o no hash e pule a pesquisa).
Nota: essas otimizações só serão mais rápidas ao lidar com matrizes longas. Não otimize demais.