C# Linq Resultado Ajuda
-
21-09-2019 - |
Pergunta
Eu tenho uma expressão de lambda que obtém resultados de um dicionário.
var sortedDict = (from entry in dctMetrics
orderby entry.Value descending
select entry);
A expressão puxa para trás os pares de que preciso, posso vê -los no modo de depuração do IDE.
Como converter isso de volta a um dicionário do mesmo tipo que a fonte? Sei que a televisão do StitledDict é uma faixa KeyValuePair, mas estou tendo problemas para entender completamente a sintaxe do método de extensão de TODICTÁRIO. Eu também tentei foreach'ing o resultado do VAR para construir um novo dicionário, mas sem sucesso.
Existe algo assim (funcionalidade):
var results = (from entry in dictionary
orderby entry.Value descending
select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
Solução
Você pode fazer assim:
var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);
Leia que "para cada par em resultados, adicione esse elemento ao novo dicionário, onde a chave será produzida como a chave do par, e o valor será produzido como o valor do par".
Além disso, apenas com base no seu código de exemplo - você deve ter em mente que um Dictionary<T, U>
é implementado como uma tabela de hash e não manterá a ordem dos elementos que você coloca nela. Considere usar a SortedDictionary
ou a SortedList
Em vez disso, se você precisar de um mapa ordenado.