Question

J'ai une expression lambda qui obtient des résultats d'un dictionnaire.

var sortedDict = (from entry in dctMetrics 
                  orderby entry.Value descending 
                  select entry);

L'expression retire les paires dont j'ai besoin, je peux les voir dans le mode de débogage de l'EDI.

Comment puis-je convertir ce retour un dictionnaire du même type que la source? Je sais TElement de sortedDict est un KeyValuePair, mais je ne parviens pas à comprendre pleinement la syntaxe de la méthode d'extension ToDictionary. J'ai aussi essayé foreach'ing le résultat var pour construire un nouveau par morceaux dictionnaire, mais en vain.

Y at-il quelque chose comme ça (fonctionnalité sage):

var results = (from entry in dictionary 
               orderby entry.Value descending 
               select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
Était-ce utile?

La solution

Vous pouvez le faire comme ceci:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);

Lire que « pour chaque paire dans les résultats, ajouter cet élément au nouveau dictionnaire, où la clé sera produit comme la clé de la paire, et la valeur sera produite comme la valeur de la paire. »

En outre, tout en fonction de votre code exemple - vous devez garder à l'esprit qu'un Dictionary<T, U> est implémenté comme une table de hachage, donc il ne sera pas maintenir l'ordre des éléments que vous y mettez. Pensez à utiliser un SortedDictionary ou un SortedList au lieu si vous avez besoin d'une carte ordonnée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top