2008-10-28 10 views
8

A menudo uso Diccionario en C# 2.0 con la primera clave como cadena que contenía un identificador único.Diccionario <string, MyObject> o List <MyObject> con C# 3.5?

Estoy aprendiendo C# 3.0 + y parece que ahora puedo simplemente usar una lista y simplemente hacer LINQ en ese objeto para obtener el objeto específico (con el .where()).

Entonces, si entiendo bien, ¿la clase Dictionary ha perdido su propósito?

Respuesta

13

no, un diccionario es aún más eficiente para obtener cosas devueltas con una clave.

una lista que todavía tiene que recorrer la lista para encontrar lo que desea. Un diccionario hace una búsqueda.

2

En mi humilde opinión, el enfoque del diccionario será MUCHO más rápido que LINQ, por lo que si tiene una matriz con muchos elementos, debería usar Dictionary.

5

Si solo tiene una Lista, entonces haciendo una selección de LINQ escaneará cada elemento de la lista y lo comparará con el que está buscando.

Sin embargo, el Diccionario calcula un código hash de la cadena que está buscando (devuelto por el método GetHashCode). Este valor se usa para buscar la cadena de manera más eficiente. Para obtener más información sobre cómo funciona esto, consulte Wikipedia.

Si tiene más de unas pocas cadenas, el método inicial (Lista) comenzará a ser muy lento.

2

El diccionario se implementa como una tabla hash. Por lo tanto, debe dar acceso de tiempo constante para las búsquedas. La lista se implementa como una matriz dinámica, que le proporciona acceso en tiempo lineal.

En función de las estructuras de datos subyacentes, el diccionario aún debería ofrecerle un mejor rendimiento.

documentación de MSDN en Diccionario

http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

y Lista

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx

Cuestiones relacionadas