Ordene alfabéticamente su lista de cadenas con las que hace coincidir, luego construya una matriz de índices que indique dónde comienza su lista para cada carácter que es un carácter inicial para una de las cadenas, tal vez indexando a la segundo personaje dependiendo de la amplitud de la variedad y si su coincidencia es sensible a mayúsculas o minúsculas.
Lea el archivo carácter por carácter con una secuencia para minimizar la huella de memoria, revise en la matriz de índice para ver dónde comienza y termina en la lista de cadenas para que pueda sacar esa página de caracteres, si hay algo que empiece por esas combinaciones de personajes. Luego continúe filtrando dentro de la página hasta que tenga una coincidencia restante y el siguiente carácter coincida 0.
Elimine esa cadena de la lista de cadenas para que coincida, colóquela en otra lista si lo desea. Luego comience a verificar su índice en el siguiente personaje y continúe haciéndolo cada vez que se encuentre sin coincidencias.
El índice le proporciona un agregado más eficiente para minimizar el número de elementos iterados.
Esto podría darle un índice de profundidad de dos caracteres:
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;
}
y para buscar el índice de partida en su lista que acaba de acceso:
int startOfCurrentCharPage = stringIndex[string.Format("{0}{1}", lastChar, currentChar)];
¿Necesita verificar que cada cadena existe una sola vez, o necesita contar cuántas veces ocurre cada una? –
¿Cuántas veces debes hacerlo? ¿Una vez? ¿Regularmente? ¿Debería ser rápido? 15 MB no es mucho en estos días. – Kobi
Cuando dices "la mejor manera", ¿qué significa "mejor"? ¿Has intentado cargarlos en un 'HashSet', y si es así, ¿qué ocurrió al hacerlo? –
ChrisW