Existe-t-il une réelle différence pratique entre a SortedList<TKey,TValue>
et a SortedDictionary<TKey,TValue>
? Y a-t-il des circonstances dans lesquelles vous utiliseriez spécifiquement l'un et pas l'autre?
c#
.net
generics
sortedlist
sorteddictionary
Shaul Behr
la source
la source
SortedList<TKey,TValue>
plutôt qu'unSortedList<T>
? Pourquoi ne met-il pas en œuvreIList<T>
?Réponses:
Oui - leurs performances diffèrent considérablement. Il serait probablement préférable de les appeler
SortedList
etSortedTree
cela reflète la mise en œuvre de plus près.Consultez les documents MSDN pour chacun d'eux (
SortedList
,SortedDictionary
) pour plus de détails sur les performances de différentes opérations dans différentes situations. Voici un joli résumé (à partir desSortedDictionary
documents):(
SortedList
maintient en fait un tableau trié, plutôt que d'utiliser un arbre. Il utilise toujours la recherche binaire pour trouver des éléments.)la source
Voici une vue tabulaire si cela peut vous aider ...
Du point de vue des performances :
Du point de vue de la mise en œuvre :
Pour paraphraser grossièrement , si vous avez besoin de performances brutes, cela
SortedDictionary
pourrait être un meilleur choix. Si vous avez besoin d'une surcharge de mémoire moindre et que la récupération indexéeSortedList
convient mieux. Consultez cette question pour en savoir plus sur le moment de l'utiliser.Vous pouvez en lire plus ici , ici , ici , ici et ici .
la source
BDictionary<Key,Value>
à LoycCore au lieu deSortedDictionary
.BDictionary
généralement plus lent queSortedDictionary
pour les très grandes tailles, mais il est plus rapide queSortedList
s'il y a plus de 700 articles. L'utilisation de la mémoire ne devrait être que légèrement supérieure àSortedList
(très inférieure àSortedDictionary
), en raison de l'utilisation de tableaux dans les feuilles de l'arbre.J'ai ouvert le réflecteur pour y jeter un œil, car il semble y avoir un peu de confusion
SortedList
. Ce n'est en fait pas un arbre de recherche binaire, c'est un tableau trié (par clé) de paires clé-valeur . Il existe également uneTKey[] keys
variable qui est triée en synchronisation avec les paires clé-valeur et utilisée pour la recherche binaire.Voici une source (ciblant .NET 4.5) pour sauvegarder mes revendications.
Membres privés
SortedList.ctor (IDictionary, IComparer)
SortedList.Add (TKey, TValue): void
SortedList.RemoveAt (int): void
la source
Consultez la page MSDN pour SortedList :
De la section Remarques:
la source
Il s'agit d'une représentation visuelle de la façon dont les performances se comparent.
la source
On en dit déjà assez sur le sujet, mais pour faire simple, voici mon point de vue.
Un dictionnaire trié doit être utilisé lorsque
De l'autre côté, la liste triée doit être utilisée lorsque
J'espère que cela t'aides!!
la source
L'accès à l'index (mentionné ici) est la différence pratique. Si vous devez accéder au successeur ou au prédécesseur, vous avez besoin de SortedList. SortedDictionary ne peut pas faire cela, vous êtes donc assez limité dans la façon dont vous pouvez utiliser le tri (premier / pour chaque).
la source