Pregunta

Tengo una expresión lambda que consigue resultados de un diccionario.

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

Los tirones de expresión hacia los pares que necesito, puedo verlos en modo de depuración del IDE.

¿Cómo convierto esto de nuevo un diccionario del mismo tipo que la fuente? Sé TElement de sortedDict es un KeyValuePair, pero estoy teniendo problemas para entender plenamente la sintaxis del método de extensión ToDictionary. También probé foreach'ing el resultado var a trozos construir un nuevo diccionario, pero fue en vano.

¿Hay algo como esto (la funcionalidad del reloj):

var results = (from entry in dictionary 
               orderby entry.Value descending 
               select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
¿Fue útil?

Solución

Puede hacerlo de esta manera:

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

Leer que a medida "para cada par de resultados, agregar ese elemento al nuevo diccionario, en el que se produjo la tecla que la clave del par, y el valor se produce como el valor del par."

Además, sólo se basa en el código de ejemplo - que debe tener en cuenta que un Dictionary<T, U> se implementa como una tabla hash, por lo que no mantendrá el orden de los elementos que puso en él. Considere el uso de un SortedDictionary o una SortedList lugar si necesita un mapa ordenado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top