Czy jest jakaś praktyczna różnica między a SortedList<TKey,TValue>
a a SortedDictionary<TKey,TValue>
? Czy są jakieś okoliczności, w których używałbyś jednego, a nie drugiego?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
źródło
źródło
SortedList<TKey,TValue>
zamiast jednegoSortedList<T>
? Dlaczego się nie implementujeIList<T>
?Odpowiedzi:
Tak - ich parametry wydajnościowe różnią się znacznie. Prawdopodobnie byłoby lepiej do nich zadzwonić
SortedList
iSortedTree
jako że odzwierciedla wdrażanie bardziej uważnie.Przejrzyj dokumentację MSDN dla każdego z nich (
SortedList
,SortedDictionary
), aby uzyskać szczegółowe informacje na temat wydajności dla różnych operacji w różnych situtacjach. Oto ładne podsumowanie (zSortedDictionary
dokumentów):(
SortedList
faktycznie utrzymuje posortowaną tablicę, zamiast używać drzewa. Nadal używa wyszukiwania binarnego, aby znaleźć elementy.)źródło
Oto widok tabelaryczny, jeśli pomaga ...
Z perspektywy wydajności :
Z perspektywy wdrożenia :
Z grubsza sparafrazując, jeśli potrzebujesz surowej wydajności,
SortedDictionary
może być lepszym wyborem. Jeśli potrzebujesz mniejszego narzutu pamięci i indeksowane pobieranieSortedList
lepiej pasuje. Zobacz to pytanie, aby dowiedzieć się więcej o tym, kiedy użyć.Możesz przeczytać więcej tutaj , tutaj , tutaj , tutaj i tutaj .
źródło
BDictionary<Key,Value>
w LoycCore zamiastSortedDictionary
.BDictionary
jest zwykle wolniejszy niżSortedDictionary
z wyjątkiem bardzo dużych rozmiarów, ale jest szybszy niż,SortedList
jeśli jest około 700 przedmiotów. Wykorzystanie pamięci powinno być tylko nieznacznie wyższe niżSortedList
(znacznie niższe niżSortedDictionary
), ze względu na użycie tablic w liściach drzewa.Otworzyłem Odbłyśnik, żeby na to spojrzeć, ponieważ wydaje się, że jest trochę zamieszania
SortedList
. W rzeczywistości nie jest to drzewo wyszukiwania binarnego, to posortowana (według klucza) tablica par klucz-wartość . Istnieje równieżTKey[] keys
zmienna, która jest sortowana synchronicznie z parami klucz-wartość i używana do wyszukiwania binarnego.Oto źródło (ukierunkowane na .NET 4.5) do tworzenia kopii zapasowych moich roszczeń.
Członkowie prywatni
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
źródło
Sprawdź stronę MSDN dla SortedList :
Z sekcji Uwagi:
źródło
Jest to wizualna reprezentacja porównania wydajności.
źródło
Dość już powiedziano na ten temat, jednak dla uproszczenia, oto moje zdanie.
Posortowanego słownika należy używać, gdy-
Z drugiej strony listy posortowanej należy używać, gdy-
Mam nadzieję że to pomoże!!
źródło
Dostęp do indeksu (wspomniany tutaj) stanowi praktyczną różnicę. Jeśli potrzebujesz uzyskać dostęp do następcy lub poprzednika, potrzebujesz SortedList. SortedDictionary nie może tego zrobić, więc masz dość ograniczone możliwości korzystania z sortowania (first / foreach).
źródło