In ordine alfabetico, ordina l'elenco di stringhe su cui stai eseguendo l'abbinamento, quindi crea un array di indici che ti indica dove si trova l'inizio dell'elenco per ogni carattere che è un carattere di partenza per una delle stringhe, magari indicizzazione per secondo carattere in base all'ampiezza della varietà e se la tua corrispondenza è sensibile al maiuscolo o minuscolo.
Leggere il file carattere per carattere con uno stream per ridurre l'ingombro della memoria, controllando nell'array dell'indice per vedere dove quel personaggio inizia e finisce nell'elenco di stringhe in modo da poter estrarre quella pagina di caratteri, se c'è qualcosa che inizia con quelle combinazioni di caratteri. Quindi continua a filtrare all'interno della pagina finché non rimane una corrispondenza e il successivo fa corrispondenze 0.
Rimuovi quella stringa dall'elenco di stringhe corrispondenti, inseriscile in un'altra lista se lo desideri. Quindi inizia a controllare il tuo indice sul prossimo personaggio e continua a farlo ogni volta che non incontri nessuna corrispondenza.
L'indice fornisce un aggregato più efficiente per ridurre al minimo il numero di elementi iterati contro.
Questo potrebbe dare un due caratteri indice di profondità:
Dictionary<string,int> stringIndex = new Dictionary<char,int>();
for(int i = 0; i < sortedSearchStrings.Length; i++;)
{
if (!stringIndex.Keys.Contains(sortedSearchStrings[i][0])) stringIndex[sortedSearchStrings[i][0]] = i;
if (!stringIndex.Keys.Contains(sortedSearchStrings[i][0] + sortedSearchStrings[i][1])) stringIndex[sortedSearchStrings[i][0] + sortedSearchStrings[i][1]] = i;
}
quindi per individuare l'indice di partenza nella vostra lista è sufficiente accesso:
int startOfCurrentCharPage = stringIndex[string.Format("{0}{1}", lastChar, currentChar)];
fonte
2010-09-10 20:15:00
È necessario verificare solo che ciascuna stringa esista una volta oppure è necessario contare quante volte ciascuna si verifica? –
Quante volte devi farlo? Una volta? Regolarmente? Dovrebbe essere veloce? 15 MB non è così tanto in questi giorni. – Kobi
Quando dici "modo migliore", cosa significa "migliore"? Hai provato a caricarli in un 'HashSet', e se sì cosa c'è di sbagliato nel farlo? –
ChrisW