2012-07-30 9 views
6

Mi aplicación .NET funciona con la colección de usuarios. Un objeto de usuario contiene el nombre de usuario, el nombre completo, el dominio ...Elija entre la lista o el diccionario

Me pregunto qué tipo de colección preferiría almacenar los usuarios, entre una 1) Lista o 2) Diccionario, donde la clave del diccionario es la nombre de usuario

Entiendo que la opción de diccionario es la más rápida al tener que recuperar un usuario desde su nombre de usuario, pero dado que se hace referencia al nombre de usuario dos veces, puede haber un error de consistencia. (como clave de diccionario y como atributo de usuario)? ¿Podría explicarme cuáles son las diferencias desde el punto de vista del diseño?

+1

No podrá tener dos claves del mismo valor en el Diccionario. ¿No tienes un campo único? – davenewza

+0

Consulte aquí: http://stackoverflow.com/questions/7914830/what-is-the-difference-between-list-and-dictionary-in-c-sharp – bitsmuggler

+0

Consulte las preguntas frecuentes: esta pregunta no puede responderse específicamente con un final tan general. – Richard

Respuesta

2

El mejor enfoque desde el punto de vista del diseño es crear una clase personalizada UserCollection y ocultar los detalles de almacenamiento reales. Esto le da la capacidad de cambiar de List a Dictionary sin afectar a otro código. Supongamos que es una capa adicional de abstracción.

Las diferencias entre List y Dictionary son conceptuales. Regla simple: si los elementos son únicos y necesita una complejidad de búsqueda O (c), utilice un diccionario; de lo contrario, utilice una lista.

3

Si normalmente busca un usuario por nombre de usuario, definitivamente use un diccionario. Usando una Lista, tendrías que "buscar" tu camino hacia la correcta. En cuanto a la coherencia, implementaría una clase Manager que sería la única permitida para manipular el diccionario, lo que reforzaría la coherencia. En muchos motores de membresía, el nombre de usuario no se puede cambiar. ¿Eso ayudaría a tu solución?

0

Depende de los requisitos, creo que para la lista más pequeña la diferencia de rendimiento será insignificante y el uso de la lista debe ser un enfoque preferido teniendo en cuenta la coherencia y puede tener la consulta como.

var user = Users.SingleOrDefault(user => user.username == 'username') 
0

Prefiero listas de objetos, especialmente cuando los datos se almacenan en una base de datos. Ser capaz de consultar una fuente de datos y tener una lista devuelta es muy útil. También se prefiere cuando los datos se acceden secuencialmente, como con una cuadrícula de datos.

Espero que esto ayude.

Cuestiones relacionadas