¿Hay alguna diferencia práctica real entre ay SortedList<TKey,TValue>
a SortedDictionary<TKey,TValue>
? ¿Hay alguna circunstancia en la que usarías específicamente uno y no el otro?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
fuente
fuente
SortedList<TKey,TValue>
lugar de unoSortedList<T>
? ¿Por qué no se implementaIList<T>
?Respuestas:
Sí, sus características de rendimiento difieren significativamente. Probablemente sería mejor llamarlos
SortedList
ySortedTree
eso refleja la implementación más de cerca.Mire los documentos de MSDN para cada uno de ellos (
SortedList
,SortedDictionary
) para obtener detalles del rendimiento de diferentes operaciones en diferentes situaciones. Aquí hay un buen resumen (de losSortedDictionary
documentos):(en
SortedList
realidad mantiene una matriz ordenada, en lugar de usar un árbol. Todavía usa la búsqueda binaria para encontrar elementos).fuente
Aquí hay una vista tabular si ayuda ...
Desde una perspectiva de rendimiento :
Desde una perspectiva de implementación :
Para más o menos paráfrasis, si necesita rendimiento bruto
SortedDictionary
podría ser una mejor opción. Si necesita menos sobrecarga de memoria y la recuperación indexada seSortedList
ajusta mejor. Consulte esta pregunta para obtener más información sobre cuándo usar cuáles.Puedes leer más aquí , aquí , aquí , aquí y aquí .
fuente
BDictionary<Key,Value>
en LoycCore en lugar de hacerloSortedDictionary
.BDictionary
generalmente es más lento que aSortedDictionary
excepción de los tamaños muy grandes, pero es más rápido queSortedList
si hay más de 700 artículos más o menos. El uso de la memoria debe ser solo ligeramente mayor queSortedList
(mucho menor queSortedDictionary
), debido al uso de matrices en las hojas del árbol.Abrí Reflector para echar un vistazo a esto, ya que parece haber un poco de confusión
SortedList
. De hecho, no es un árbol de búsqueda binario, es una matriz ordenada (por clave) de pares clave-valor . También hay unaTKey[] keys
variable que se ordena en sincronización con los pares clave-valor y se utiliza para la búsqueda binaria.Aquí hay alguna fuente (dirigida a .NET 4.5) para respaldar mis reclamos.
Miembros privados
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
fuente
Consulte la página de MSDN para SortedList :
De la sección de Observaciones:
fuente
Esta es una representación visual de cómo las actuaciones se comparan entre sí.
fuente
Ya se ha dicho lo suficiente sobre el tema, sin embargo, para simplificar, aquí está mi opinión.
El diccionario ordenado debe usarse cuando:
Por otro lado, la lista ordenada debe usarse cuando:
¡¡Espero que esto ayude!!
fuente
El acceso al índice (mencionado aquí) es la diferencia práctica. Si necesita acceder al sucesor o predecesor, necesita SortedList. SortedDictionary no puede hacer eso, por lo que está bastante limitado con la forma en que puede usar la clasificación (primero / foreach).
fuente