Bester allgemeiner Zweck - Besonders kurze Arrays (1000 Elemente oder weniger) und Codierer, die sich nicht sicher sind, welche Optimierungen ihren Anforderungen am besten entsprechen.
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
Es wurde erwähnt, dass grep alle Werte durchläuft, auch wenn der erste Wert im Array übereinstimmt. Dies ist wahr, jedoch ist grep in den meisten Fällen immer noch extrem schnell . Wenn Sie über kurze Arrays (weniger als 1000 Elemente) sprechen, werden die meisten Algorithmen sowieso ziemlich schnell sein. Wenn Sie über sehr lange Arrays (1.000.000 Elemente) sprechen, ist grep akzeptabel schnell, unabhängig davon, ob das Element das erste oder das mittlere oder das letzte im Array ist.
Optimierungsfälle für längere Arrays:
Wenn Ihr Array sortiert ist , verwenden Sie eine "binäre Suche".
Wenn dasselbe Array mehrmals durchsucht wird, kopieren Sie es zuerst in einen Hash und überprüfen Sie dann den Hash. Wenn der Speicher ein Problem darstellt, verschieben Sie jedes Element aus dem Array in den Hash. Effizienter, zerstört jedoch das ursprüngliche Array.
Wenn dieselben Werte innerhalb des Arrays wiederholt gesucht werden , erstellen Sie träge einen Cache. (Wenn jedes Element durchsucht wird, überprüfen Sie zuerst, ob das Suchergebnis in einem persistierten Hash gespeichert wurde. Wenn das Suchergebnis nicht im Hash gefunden wird, durchsuchen Sie das Array und fügen Sie das Ergebnis in den persistierten Hash ein, damit wir es beim nächsten Mal tun finde es im Hash und überspringe die Suche).
Hinweis: Diese Optimierungen sind nur bei langen Arrays schneller. Nicht zu stark optimieren.