2012-04-16 15 views
9

Tengo un diccionario y añadido algunos elementos en it.For ejemplo,cómo iterar un diccionario <string, string> en orden inverso (de último a primero) en C#?

Dictionary<string, string> d = new Dictionary<string, string>(); 

d.Add("Content","Level0"); 
d.Add("gdlh","Level1"); 
d.Add("shows","Level2"); 
d.Add("ytye","Level0"); 

En C#, diccionario mantiene elementos en naturales order.but i ahora quiero iterar esos valores del último al primero (es decir, orden inverso) .i quiero decir,

primero quiero leer ytye luego muestra, gdlh y finalmente el contenido.

favor, me guía a salir de este problema ...

+3

estado usted * "En C#, diccionario aísla de los elementos en orden natural" *. Eso no es correcto. [La sección de comentarios] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx) indica * "El orden en el que se devuelven los elementos no está definido." * –

+1

@Daniel Hilgarth Esa fue mi inicial pensé, y lo comenté como tal, pero lo eliminé porque probé un código y funciona. Así que investigué un poco más. En última instancia, es posible que los elementos se reordenen durante la inserción si fuerzan el cambio de tamaño del diccionario. SortedDictionary se refiere al orden de las claves, pero puede darle un comparador ... OrderedDictionary no es genérico, pero puede ser lo que necesita. –

+0

Una vez tuve un gran altercado sobre esto: mientras que el "orden" de las entradas enumeradas en un diccionario estándar * es * básicamente el orden en que las puse, ¡ESTE NO ES UN COMPORTAMIENTO GARANTIZADO! Es extremadamente imprudente suponer que este siempre será el caso. – JerKimball

Respuesta

14

Sólo tiene que utilizar el método de extensión LINQ Reverse

por ejemplo,

foreach(var item in d.Reverse()) 
{ 
    ... 
} 
7

uso de LINQ inversa, pero tenga en cuenta que no inversa en lugar:

var reversed = d.Reverse(); 

Pero tenga en cuenta que esto no es un SortedDictionary, por lo que el orden no es necesariamente garantizado en el primer lugar. ¿Tal vez quiere OrderByDescending en su lugar?

+0

+1 por mencionar que el orden en un diccionario no está garantizado. –

0

Está disponible con LINQ: d.Reverse()

3

Tal OrderByDescending en la tecla. De esta manera:

d.OrderByDescending (x =>x.Key) 

Foreach así:

foreach (var element in d.OrderByDescending (x =>x.Key)) 
{ 

} 
Cuestiones relacionadas