2010-07-21 24 views
6

¿Cuál es la manera más rápida de implementar algo como esto en C#:manera más rápida de encontrar cadena en C#?

private List<string> _myMatches = new List<string>(){"one","two","three"}; 
    private bool Exists(string foo) { 
     return _myMatches.Contains(foo); 
    } 

nota, esto es sólo un ejemplo. solo necesito realizar un filtrado de bajo nivel en algunos valores que se originan como cadenas. Podría internarlos, pero todavía necesito admitir la comparación de una o más cadenas. Significado, ya sea de cadena a comparación de cadena (1 filtro), o si la cadena existe en la lista de cadenas (filtros múltiples).

+0

esto parece rápido para mí ... – Luiscencio

+0

más rápido con lo que la memoria/pre-tratamiento de la sobrecarga y qué cantidad de datos? –

+0

..... para listas. –

Respuesta

17

Usted puede hacer esto más rápido mediante el uso de un HashSet<T>, especialmente si usted va a ser la adición de muchos más elementos:

private HashSet<string> _myMatches = new HashSet<string>() { "one", "two", "three" }; 

private bool Exists(string foo) 
{ 
    return _myMatches.Contains(foo); 
} 

Esta voluntad vencer a un List<T> desde HashSet<T>.Contains es una operación O (1).

List<T> El método Contiene, por otro lado, es O (N). Buscará en la lista completa (hasta que se encuentre una coincidencia) en cada llamada. Esto se volverá más lento a medida que se agreguen más elementos.

+1

+1 - Yo iría con este. No parece que los HashTables sean apropiados dado que no está almacenando pares de información. Mi pensamiento inmediato fue el diccionario, pero lo descarté por la misma razón que descarté HashTable. – BenAlabaster

+0

gracias, ¿cree que internar las cadenas ayudaría? –

+0

Un par de objeciones: esto supone que la estructura solo debe contener valores únicos, y que el tiempo de llenado y el consumo de memoria son irrelevantes. –

0

Las tablas Hash son sus amigos para búsquedas rápidas de cadenas.

Tener un vistazo a un buen tutorial en Working with HashTable in C# 2.0

+2

Mejor utilizar el HashSet , ya que es seguro y está diseñado exactamente para este tipo de operación. –

+0

:-) usted es –

0

Tendrás que crear un perfil. ¿Y te refieres a la búsqueda más rápida (es decir, cuenta el tiempo de inicialización)?

@Elf Rey ya se ha mencionado Hash Tables, que me iba a señalarle al (específicamente HashSet<T>)

+0

¡Sip! ¡HashSet suena como algo bueno! –

+0

inicialización no importa, solo búsqueda. Gracias –

Cuestiones relacionadas