Jeśli NSString + Wynik robi to, co chcesz, ale jest zbyt powolny, można zacząć od przyspieszając go. Linie od 23 do 28 w -scoreAgainst:fuzziness:options:
to kod instalacyjny, który należy wykonać tylko raz, a nie na każdym z 200 porównywanych. Więc wyciągnij ten kod do metody konfiguracji i zmierz ponownie.
Edit:
Jako ćwiczenie, ja forked StringScore, ekstrahuje kod instalacyjny i zrobił minimalne zmiany, aby uzyskać pewną poprawę wydajności, a następnie mierzy się go. Użyłem 1000 losowych słów, pogrupowałem je po trzy (np. "Zakłócone picie kropek"). Dla każdej z tych grup wykonałem instalację (jak powiedziano w tej oryginalnej odpowiedzi), a następnie porównałem ciąg do wszystkich 1000 grup. Zajmuje to około 11 sekund na moim Core 2 Duo.
Porównywanie jednego słowa do 1000 trwa około 11 ms. Teraz potrzebujesz tylko od 1 do 200, więc prawdopodobnie będzie to znacznie poniżej 10 ms. To powinno działać dla ciebie?
(Nawiasem mówiąc, prawie połowę czasu spędził jeszcze w rangeOfString: znalezienie pojedynczego znaku, to prawdopodobnie można zrobić o wiele szybciej, ale nie chcę, aby w szczegółach algorytmu.)
Dzięki temu poprawi się znacznie, ale nadal jest zbyt wolny. – Wesley
@Weszcze mnie to zaskakuje, że jest dla ciebie za wolny, więc zmierzyłem to. Zobacz edycję postu. –
Przykro mi to mówić, ale miałeś rację. Miałem innego obserwatora, który również był wyzwalany w tym samym czasie, co było winowajcą. Niemniej jednak, twoje optymalizacje są warte zachodu. Dziękuję Ci! – Wesley