2012-07-30 12 views
6

Meine .NET-Anwendung arbeitet mit einer Sammlung von Benutzern. Ein Benutzerobjekt enthält den Benutzernamen, den vollständigen Namen, die Domäne ....Wählen Sie zwischen Liste oder Wörterbuch

Ich frage mich, welche Art von Sammlung ich bevorzugen sollte, um die Benutzer zwischen einer 1) Liste oder 2) Wörterbuch, wo der Wörterbuchschlüssel ist Nutzername.

Ich verstehe, dass die Wörterbuchoption am schnellsten ist, wenn Sie einen Benutzer von seinem Benutzernamen abrufen müssen, aber weil der Benutzername zweimal referenziert wird Konsistenz Fehler auftreten. (als Wörterbuchschlüssel und als Benutzerattribut)? Könnten Sie mir auch erklären, was die Unterschiede vom Designstandpunkt sind?

+1

Sie können nicht zwei Schlüssel mit dem gleichen Wert im Dictionary haben. Hast du kein einzigartiges Feld? – davenewza

+0

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

+0

Bitte überprüfen Sie die FAQ: Diese Frage kann nicht speziell mit beantwortet werden ein solches allgemeines Ende. – Richard

Antwort

2

Der beste Ansatz aus Sicht des Entwurfs besteht darin, eine benutzerdefinierte Klasse UserCollection zu erstellen und die tatsächlichen Speicherdetails auszublenden. Dies gibt Ihnen die Möglichkeit, von Liste zu Verzeichnis ohne Auswirkung auf anderen Code zu wechseln. Angenommen, es handelt sich um eine zusätzliche Abstraktionsschicht.

Die Unterschiede zwischen List und Dictionary sind konzeptionell. Einfache Regel - Wenn Elemente eindeutig sind und Sie eine O (c) -Suchkomplexität benötigen, verwenden Sie ein Dictionary, andernfalls verwenden Sie eine Liste.

3

Wenn Sie normalerweise einen Benutzer nach UserName suchen, verwenden Sie unbedingt ein Dictionary. Mit einer Liste müssen Sie sich auf den richtigen Weg "foreach"! Was die Konsistenz betrifft, würde ich eine Manager-Klasse implementieren, die das Wörterbuch nur bearbeiten könnte, um Konsistenz zu erreichen. In vielen Mitgliedschafts-Engines kann der Benutzername nicht geändert werden. Würde das Ihrer Lösung helfen?

0

Es hängt von den Anforderungen ab, ich denke, für kleinere Liste der Leistungsunterschied wird vernachlässigbar sein und Verwendung von List sollte ein bevorzugter Ansatz in Anbetracht der Konsistenz sein und Sie können die Abfrage mögen.

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

Ich bevorzuge Listen von Objekten, vor allem, wenn die Daten in einer Datenbank gespeichert sind. Die Möglichkeit, eine Datenquelle abzufragen und eine Liste zurückzugeben, ist sehr hilfreich. Es ist auch bevorzugt, wenn auf die Daten sequentiell zugegriffen wird, beispielsweise mit einem Datenraster.

Ich hoffe, das hilft.

Verwandte Themen