Dictionarystring, MyObject oder ListMyObject mit C # 3.5?

8

Ich benutze oft Dictionary in C # 2.0 mit dem ersten Schlüssel als Zeichenfolge, die eine eindeutige Kennung enthielt.

Ich lerne C # 3.0 + und es scheint, dass ich jetzt einfach eine Liste verwenden und einfach LINQ für dieses Objekt ausführen kann, um das spezifische Objekt zu erhalten (mit der .where ()).

Wenn ich also gut verstehe, hat die Wörterbuchklasse ihren Zweck verloren?

    
Patrick Desjardins 28.10.2008, 21:24
quelle

4 Antworten

13

Nein, ein Wörterbuch ist immer noch effizienter, wenn es darum geht, Dinge mit einem Schlüssel wieder zurückzubekommen.

eine Liste, die Sie noch durch die Liste durchlaufen müssen, um zu finden, was Sie wollen. Ein Wörterbuch führt eine Suche durch.

    
Keith Nicholas 28.10.2008, 21:25
quelle
5

Wenn Sie nur eine Liste haben, wird eine LINQ-Auswahl alle Elemente in der Liste durchsuchen und sie mit denen vergleichen, die Sie suchen.

Das Dictionary berechnet jedoch einen Hash-Code der gesuchten Zeichenfolge (die von der GetHashCode-Methode zurückgegeben wird). Dieser Wert wird dann verwendet, um die Zeichenfolge effizienter nachzuschlagen. Weitere Informationen dazu finden Sie unter Wikipedia .

Wenn Sie mehr als ein paar Strings haben, wird die initiale (List) -Methode langsam langsam.

    
Oliver Hallam 28.10.2008 21:29
quelle
2

IMHO die Wörterbuch-Ansatz wird viel schneller als LINQ, wenn Sie also ein Array mit vielen Elementen haben, sollten Sie eher Wörterbuch verwenden.

    
Leopold Cimrman 28.10.2008 21:26
quelle
2

Das Wörterbuch ist als Hashtable implementiert. Daher sollte es einen konstanten Zeitzugriff für Nachschlagevorgänge geben. List ist als dynamisches Array implementiert, das Ihnen einen linearen Zeitzugriff ermöglicht.

Basierend auf den zugrunde liegenden Datenstrukturen sollte das Dictionary Ihnen immer noch eine bessere Leistung bieten.

MSDN-Dokumentation zu Dictionary

Ссылка

und Liste

Ссылка

    
biozinc 28.10.2008 21:30
quelle

Tags und Links