Mục đích chung tốt nhất - Đặc biệt là các mảng ngắn (1000 mục trở xuống) và các lập trình viên không chắc chắn về những gì tối ưu hóa phù hợp nhất với nhu cầu của họ.
# $value can be any regex. be safe
if ( grep( /^$value$/, @array ) ) {
print "found it";
}
Nó đã được đề cập rằng grep đi qua tất cả các giá trị ngay cả khi giá trị đầu tiên trong mảng khớp. Điều này là đúng, tuy nhiên grep vẫn cực kỳ nhanh đối với hầu hết các trường hợp . Nếu bạn đang nói về mảng ngắn (dưới 1000 mục) thì hầu hết các thuật toán sẽ khá nhanh. Nếu bạn đang nói về mảng rất dài (1.000.000 mục) thì grep có thể chấp nhận nhanh chóng bất kể mục đó là mục đầu tiên hay phần giữa hoặc phần cuối trong mảng.
Các trường hợp tối ưu hóa cho các mảng dài hơn:
Nếu mảng của bạn được sắp xếp , sử dụng "tìm kiếm nhị phân".
Nếu cùng một mảng được tìm kiếm nhiều lần, hãy sao chép nó vào hàm băm trước rồi kiểm tra hàm băm. Nếu bộ nhớ là một mối quan tâm, sau đó di chuyển từng mục từ mảng vào hàm băm. Bộ nhớ hiệu quả hơn nhưng phá hủy mảng ban đầu.
Nếu các giá trị tương tự được tìm kiếm lặp đi lặp lại trong mảng, lười biếng xây dựng bộ đệm. (vì mỗi mục được tìm kiếm, trước tiên hãy kiểm tra xem kết quả tìm kiếm có được lưu trong hàm băm không. Nếu kết quả tìm kiếm không được tìm thấy trong hàm băm, sau đó tìm kiếm mảng và đưa kết quả vào hàm băm bền tìm nó trong hàm băm và bỏ qua tìm kiếm).
Lưu ý: những tối ưu hóa này sẽ chỉ nhanh hơn khi xử lý các mảng dài. Đừng tối ưu hóa quá mức.