2012-04-16 10 views
9

Ho un dizionario e ho aggiunto alcuni elementi su it.For esempio,come iterare un dizionario <stringa, stringa> in ordine inverso (dall'ultimo al primo) in 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"); 

In C#, dizionario mantiene elementi naturali order.but Ora voglio iterare quei valori dall'ultimo al primo (cioè, Ordine inverso) .i mean,

prima voglio leggere yty quindi mostra, gdlh e infine contenuto.

prega di guida me di uscire di questo problema ...

+3

stato È * "In C#, dizionario mantiene gli elementi in ordine naturale" *. Non è corretto [La sezione commenti] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx) afferma * "L'ordine in cui vengono restituiti gli articoli non è definito." * –

+1

@Daniel Hilgarth Era la mia iniziale pensato, e ho commentato come tale, ma rimosso perché ho testato alcuni codici e funziona. Così ho fatto un po 'più di ricerca. In definitiva è possibile riordinare gli elementi durante l'inserimento se costringe il dizionario a ridimensionare. SortedDictionary si riferisce all'ordine delle chiavi, ma puoi dargli un confronto ... OrderedDictionary non è generico, ma potrebbe essere quello di cui ha bisogno. –

+0

Una volta ho avuto una discussione enorme su questo - mentre l '"ordine" delle voci enumerate in un dizionario standard * è * sostanzialmente l'ordine in cui le hai inserite, QUESTO NON È IL COMPORTAMENTO GARANTITO! È estremamente imprudente presumere che sarà sempre così. – JerKimball

risposta

14

Basta usare il metodo di estensione LINQ Reverse

esempio

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

utilizzare LINQ inversione, ma nota che non si inversione in atto:

var reversed = d.Reverse(); 

Ma si noti che questa non è una SortedDictionary, quindi l'ordine non è necessariamente garantito nel primo posto. Forse vuoi invece OrderByDescending?

+0

+1 per aver menzionato che l'ordine in un dizionario non è garantito. –

0

E 'disponibile con Linq: d.Reverse()

3

Forse OrderByDescending sulla chiave. Come questo:

d.OrderByDescending (x =>x.Key) 

Foreach come questo:

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

} 
Problemi correlati