2010-07-28 6 views
3

J'essaie d'inverser des éléments dans un dictionnaire en C#. J'ai essayé:C# Inverser les éléments dans le dictionnaire

Dictionary<double, int> dict = new Dictionary<double, int>(); 
...add itmes to it.... 
var v = dict.Reverse() 

Cependant, dict.Reverse() me donne un type de IEnumberable>. Je me demandais comment je pourrais faire un type de dictionnaire?

Merci d'avance.

Répondre

11

Un dictionnaire n'est pas une structure de données ordonnée. Pour Reverse avoir une signification réelle, vous aurez besoin d'utiliser un SortedDictionary. Vous pouvez obtenir une copie inversée d'un SortedDictionary en en créant une nouvelle avec un Comparer qui fait le tri opposé à l'original (voir constructor).

var reversed = new SortedDictionary(original, new ReverseKeyComparer()); 

Notez que ReverseKeyComparer est une classe fictique pour l'exemple.

aussi - vous avez besoin de savoir que le SortedDictionary est un peu un abus de langage, si vous assimilez Dictionnaire carte ou Hashtable. Il utilise une implémentation d'arbre binaire (Red-Black, je pense) avec une complexité algorithmique différente de l'implémentation hashtable de Dictionary. Voir les sections Remarques de leurs pages de documentation respectives. Si la performance est critique, vous pourriez vouloir considérer si la commande est vraiment importante.

16

Stop!

Les dictionnaires et les tables de hachage et les ensembles ne sont pas triés.

Il est absolument inutile de trier ou de modifier l'ordre.

+3

Hahahahha +1 pour ** arrêt **. xD – Cipi

+1

Cette réponse est amusante, mais @ tvanfossons est plus informative. –

+0

@Vinko Vrsalovic: Il n'y a rien de drôle dans ma réponse. Je suis vraiment sérieux. – leppie

3

Si vous souhaitez que les dictionnaires aient un certain ordre, vous devriez consulter SortedDictionary. Voir this article.