C # LINQ Résultat ToDictionary Aide
-
21-09-2019 - |
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>);
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.