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>);
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top