Je lisais à propos de C # 's ImmutableSortedDictionary
dans System.Collections.Immutable
et la réflexion sur la façon de l' appliquer dans mon programme. J'aime assez C ++ lower_bound
et upper_bound
(voir ici ), et je m'attendais plutôt à voir quelque chose du genre pour les recherches de plage. Cependant, des méthodes similaires semblent étrangement absentes de la documentation . Suis-je en train de manquer quelque chose? Ou MS fournit-il vraiment un dictionnaire trié sans accès efficace aux plages triées? Cela ne ressemble pas exactement à quelque chose que l'on pourrait faire sur l'une IEnumerable
des clés comme une méthode d'extension, donc je suis un peu perplexe de ne pas voir quelque chose fourni directement par la collection.
11
IBinarySearchTree<K,V>
mise en œuvre semble plus proche de ce à quoi je m'attendais. Je me demande s'il a jamais bricolé dessus?ImmutableList<T>
classe est également implémentée comme une arborescence AVL. Du code source :/// The root node of the AVL tree that stores this set.
ImmutableList<T>
(soutenu par une arborescence AVL) par rapport àImmutableArray<T>
(soutenu par un tableau), selon la documentation . Raisons d'utiliser une liste immuable: 1) La mise à jour des données est courante ou le nombre d'éléments ne devrait pas être faible. 2) La mise à jour de la collection est plus critique en termes de performances que l'itération du contenu.Réponses:
Il est irritant de constater que les collections intégrées disponibles n'offrent pas un ensemble complet de fonctionnalités (comme l'
SortedDictionary
absence deBinarySearch
méthode), ce qui nous oblige à rechercher des solutions tierces (comme la bibliothèque C5 ).Dans votre cas, au lieu d'un,
ImmutableSortedDictionary
vous pouvez probablement utiliser unImmutableSortedSet
, en incorporant les valeurs dans les clés et en utilisant un comparateur approprié. Au moins, l'API de cette classe contient les propriétésMin
etMax
.la source
ImmutableList<T>
, est implémentée en interne sous forme d'arbre . Il est donc 10 fois plus lent et alloue 12 fois plus de mémoire qu'un aList<T>
. UtilisezImmutableArray<T>
plutôt.ImmutableSortedSet