2010-01-16 15 views
11

Tengo una lista de cadenas sin clasificar. Puedo colocar estos elementos en una matriz, Lista, Lista ordenada, lo que sea.¿La forma más rápida de encontrar un artículo en la lista?

Necesito encontrar la forma más rápida de buscar una cadena en esta lista. ¿Será mejor que elimine la lista en una matriz, la clasifique y luego implemente la búsqueda binaria? ¿O el marco proporciona una manera de hacer esto?

Gracias

P.S. Usando VS2008 contra .NET 2.0

Respuesta

20

Si su objetivo es solo hacer que sea muy rápido encontrar las cadenas en una colección, colóquelas en un HashSet.

HashSet.Contains es un método O (1), y las cadenas tienen un buen algoritmo hash por defecto, por lo que será difícil hacer una rutina más rápida que esta.


Editar:

Dado que está utilizando .NET 2, me acaba de hacer Dictionary<string,string> y utilizar la misma cadena de clave y valor. Dictinoary<TKey,TValue>.Contains también es O (1) y será mucho más rápido que cualquier búsqueda basada en listas que intente.

+0

Pido disculpas - Actualicé las etiquetas. Estoy usando VS2008 con .NET 2.0. Los HashSets no están disponibles. – AngryHacker

+0

Entonces use un 'Hashtable' –

+0

¿.Net realmente no tiene equivalente a HashSet? –

2

Si solo tiene que encontrar un objeto, una vez, simplemente comience por el principio y mire cada uno hasta encontrarlo. Si tendrá que repetir esta operación Buscar varias veces contra la misma lista, para buscar diferentes elementos, luego ordene mantener la lista ordenada y realice una búsqueda binaria ...

-1

No estoy seguro de si esto será de cualquier uso para usted, pero esta sería una forma bastante simple de hacerlo, aunque no estoy seguro de la "velocidad" exacta de la misma.

List<string> collection = new List<string>(); 

collection.Sort(); 

foreach(string value in collection) 
{ 
    if(value == "stringToLookFor") 
    { 
     return value; 
    } 
{ 
+2

Si vas a pasar por allí de todos modos, ¿por qué ordenarlo? – AngryHacker

+0

Esta es probablemente la forma más lenta de buscar en la lista. Si lo ordenó, podría hacer un BinarySearch que sería mucho más rápido pero aún más lento que una búsqueda en una colección basada en clave/valor. –

+2

Acabo de suponer que sería más rápido buscar a través de buscar cadenas de lugar al azar, especialmente si está al principio de la lista. Fue solo una sugerencia y de ninguna manera la única solución. –

Cuestiones relacionadas