Alphabetisch sortieren Sie Ihre Liste der Zeichenfolgen, auf denen Sie übereinstimmen, dann erstellen Sie ein Indexarray, das Ihnen angibt, wo der Anfang Ihrer Liste für jedes Zeichen ist, das ein Startzeichen für eine der Zeichenfolgen ist 2. Zeichen, abhängig von der Breite der Auswahl und ob Ihre Übereinstimmung die Groß- und Kleinschreibung berücksichtigt oder nicht.
Lesen Sie die Datei Zeichen für Zeichen mit einem Stream, um den Speicherbedarf zu minimieren. Überprüfen Sie im Indexarray, wo dieses Zeichen beginnt und endet in der Liste der Zeichenfolgen, damit Sie diese Zeichenseite auslesen können diese Zeichenkombinationen. Dann weiter Filtern innerhalb der Seite, bis Sie eine Übereinstimmung übrig haben und das nächste Zeichen macht 0.
Entfernen Sie diese Zeichenfolge aus der Liste der Zeichenfolgen zu entsprechen, fügen Sie es in eine andere Liste, wenn Sie möchten. Dann beginne, deinen Index auf das nächste Zeichen zu überprüfen und mache das jedes Mal, wenn du keine Übereinstimmungen findest.
Der Index gibt Ihnen ein effizienteres Aggregat, um die Anzahl der iterierten Elemente zu minimieren.
Sie Dies könnte einen zweistelligen Tiefenhub geben:
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;
}
dann den Startindex in der Liste finden Sie nur Zugang:
int startOfCurrentCharPage = stringIndex[string.Format("{0}{1}", lastChar, currentChar)];
Müssen Sie nur überprüfen, ob jede Zeichenfolge einmal vorhanden ist, oder müssen Sie zählen, wie oft jede auftritt? –
Wie oft müssen Sie es tun? Einmal? Regelmäßig? Sollte es schnell sein? 15MB ist nicht so viel in diesen Tagen. – Kobi
Wenn Sie "bester Weg" sagen, was bedeutet "am besten"? Haben Sie versucht, sie in ein 'HashSet' zu laden, und wenn ja, was war daran falsch? –
ChrisW