Gibt es einen wirklichen praktischen Unterschied zwischen a SortedList<TKey,TValue>
und a SortedDictionary<TKey,TValue>
? Gibt es Umstände, unter denen Sie speziell das eine und nicht das andere verwenden würden?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
quelle
quelle
SortedList<TKey,TValue>
anstelle von einemSortedList<T>
? Warum wird es nicht implementiertIList<T>
?Antworten:
Ja - ihre Leistungsmerkmale unterscheiden sich erheblich. Es wäre wahrscheinlich besser, sie zu nennen
SortedList
undSortedTree
wie spiegelt die Umsetzung näher.In den MSDN-Dokumenten für jeden von ihnen (
SortedList
,SortedDictionary
) finden Sie Details zur Leistung für verschiedene Vorgänge in verschiedenen Situationen. Hier ist eine schöne Zusammenfassung (aus denSortedDictionary
Dokumenten):(verwaltet
SortedList
tatsächlich ein sortiertes Array, anstatt einen Baum zu verwenden. Es verwendet immer noch die binäre Suche, um Elemente zu finden.)quelle
Hier ist eine tabellarische Ansicht, wenn es hilft ...
Aus Sicht der Leistung :
Aus Sicht der Implementierung :
Um es grob zu paraphrasieren: Wenn Sie Rohleistung benötigen, ist
SortedDictionary
dies möglicherweise die bessere Wahl. Wenn Sie weniger Speicheraufwand benötigen und der indizierte AbrufSortedList
besser passt. In dieser Frage erfahren Sie mehr darüber, wann Sie welche verwenden sollen.Sie können hier , hier , hier , hier und hier mehr lesen .
quelle
BDictionary<Key,Value>
in LoycCore statt in ziehen sollten wünschenSortedDictionary
.BDictionary
es normalerweise langsamer ist alsSortedDictionary
bei sehr großen Größen, aber es ist schneller alsSortedList
bei über 700 Artikeln oder so. Die Speichernutzung sollte nur geringfügig höher sein alsSortedList
(viel niedriger alsSortedDictionary
aufgrund der Verwendung von Arrays in den Blättern des Baums ) sein.Ich habe Reflector aufgeschlagen, um mir das anzusehen, da es ein bisschen Verwirrung zu geben scheint
SortedList
. Es ist in der Tat kein binärer Suchbaum, sondern ein sortiertes (nach Schlüssel) Array von Schlüssel-Wert-Paaren . Es gibt auch eineTKey[] keys
Variable, die synchron mit den Schlüssel-Wert-Paaren sortiert und für die binäre Suche verwendet wird.Hier ist eine Quelle (für .NET 4.5), um meine Ansprüche zu sichern.
Private Mitglieder
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): nichtig
SortedList.RemoveAt (int): void
quelle
Überprüfen Sie die MSDN-Seite für SortedList :
Aus dem Abschnitt Bemerkungen:
quelle
Dies ist eine visuelle Darstellung des Vergleichs der Leistungen untereinander.
quelle
Zu diesem Thema ist bereits genug gesagt, aber um es einfach zu halten, hier ist meine Meinung.
Sortiertes Wörterbuch sollte verwendet werden, wenn-
Auf der anderen Seite sollte die sortierte Liste verwendet werden, wenn
Hoffe das hilft!!
quelle
Der Indexzugriff (hier erwähnt) ist der praktische Unterschied. Wenn Sie auf den Nachfolger oder Vorgänger zugreifen müssen, benötigen Sie SortedList. SortedDictionary kann das nicht, daher sind Sie ziemlich eingeschränkt in der Verwendung der Sortierung (first / foreach).
quelle