Se NSString + punteggio fa quello che si vuole, ma è troppo lento, si potrebbe iniziare da accelerarlo. Le righe da 23 a 28 in -scoreAgainst:fuzziness:options:
sono codice di installazione che deve essere eseguito solo una volta, non su ciascuno dei 200 confronti. Quindi estrai il codice in un metodo di configurazione e misura nuovamente.
Edit:
Come esercizio, ho forked StringScore, estratto il codice di impostazione e ha fatto modifiche minime per ottenere qualche miglioramento delle prestazioni, quindi misurate esso. Ho usato 1000 parole casuali, raggruppandole in tre ciascuna (ad esempio "bere punti interrotto"). Per ciascuno di questi gruppi ho eseguito il setup (come detto in questa risposta originale) e poi ho confrontato la stringa con tutti i 1000 gruppi. Questo richiede circa 11 secondi sul mio Core 2 Duo.
Quindi il confronto di una parola in 1000 richiede circa 11 ms. Ora hai solo bisogno di 1 a 200, quindi sarà probabilmente ben meno di 10 ms. Questo dovrebbe funzionare per te?
(A proposito, quasi la metà del tempo è ancora spesi in rangeOfString: trovare un singolo carattere, questo può probabilmente fatto molto molto più veloce, ma non ho voglia di entrare nei dettagli dell'algoritmo.)
fonte
2013-02-21 23:48:33
Grazie, questo lo migliora considerevolmente, tuttavia è ancora troppo lento. – Wesley
@Wesley mi sconcerta che è troppo lento per te, quindi l'ho misurato. Vedi la modifica del post. –
Mi dispiace dirlo, ma avevi ragione. Avevo un altro osservatore che veniva attivato anche nello stesso momento in cui era il colpevole. Tuttavia, le tue ottimizzazioni sono utili. Grazie! – Wesley