Nếu NSString + Điểm làm những gì bạn muốn nhưng là quá chậm, bạn có thể bắt đầu bằng cách tăng tốc nó lên. Các dòng 23 đến 28 trong -scoreAgainst:fuzziness:options:
là mã thiết lập chỉ cần thực hiện một lần, không phải trên mỗi 200 lần so sánh. Vì vậy, kéo mã đó ra thành một phương pháp thiết lập và đo lại.
Edit:
Là một tập thể dục, tôi forked StringScore, chiết xuất mã thiết lập và đã làm thay đổi tối thiểu để có được một số cải tiến hiệu suất, sau đó đo nó. Tôi đã sử dụng 1000 từ ngẫu nhiên, nhóm chúng thành ba từ (ví dụ: "uống chấm bị gián đoạn"). Đối với mỗi nhóm, tôi đã thực hiện thiết lập (như đã nói trong câu trả lời gốc này) và sau đó so sánh chuỗi với tất cả 1000 nhóm. Điều này mất khoảng 11 giây trên Core 2 Duo của tôi.
Vì vậy, so sánh một từ với 1000 mất khoảng 11 ms. Bây giờ bạn chỉ cần 1 đến 200, vì vậy nó sẽ có lẽ cũng dưới 10 ms. Điều đó sẽ làm việc cho bạn?
(Nhân tiện, gần một nửa thời gian vẫn được dùng trong rangeOfString: tìm một ký tự đơn; điều này có thể thực hiện nhanh hơn nhiều, nhưng tôi không muốn nhận được chi tiết thuật toán.)
Nguồn
2013-02-21 23:48:33
Cảm ơn, điều này cải thiện đáng kể, tuy nhiên nó vẫn còn quá chậm. – Wesley
@ Wesley nó ngăn cản tôi rằng nó quá chậm cho bạn, vì vậy tôi đo nó. Xem chỉnh sửa bài đăng. –
Tôi rất tiếc phải nói, nhưng bạn đã đúng. Tôi đã có một người quan sát khác cũng được kích hoạt cùng lúc đó là thủ phạm. Tuy nhiên, tối ưu hóa của bạn là đáng giá. Cảm ơn bạn! – Wesley