2011-03-03 38 views
15

¿Qué ocurre si quiero ordenar un diccionario en C# con el orden determinado por su clave Y su valor? Como orden descendente por su valor y dentro de los que tienen el mismo valor, descendiendo por su clave. Parece bastante posible ordenar solo por clave o solo por valor, pero para ambos es bastante molesto.Ordenar un diccionario por clave Y valor?

+3

Es imposible ordenar el diccionario, porque el diccionario almacena los datos como una tabla hash internamente y no se puede reordenar. Primero debe convertirlo a la lista – Andrey

+0

¿Cuál es el propósito de clasificar la clave exactamente? Podría usar algunos además de un Diccionario y luego podría ordenar tanto la clave como el valor, excepto que no lo hago para eso. Si necesita una colección ordenada, usar un diccionario es una mala elección. –

+1

Por favor, acepte un aswer si fue útil. –

Respuesta

22
using System.Linq; 
... 
IOrderedEnumerable<KeyValuePair<TKey, TValue>> sortedCollection = myDictionary 
        .OrderByDescending(x => x.Value) 
        .ThenByDescending(x => x.Key); 
+4

'ThenBy' puede ser? – Andrey

+0

@Andrey sí, gracias, he cambiado el código en consecuencia. –

+2

¿Cuál es la razón del último 'ToDistionary'? el diccionario ** no puede ** ser ordenado. Destruyes el efecto de ordenar. – Andrey

1

Si necesita un esquema de ordenamiento más complejo, implementar un IComparer> para utilizar en la versión sobrecargada de OrdenarPor o OrderByDescending.

Cuestiones relacionadas