2012-04-16 42 views
9

我有一個字典,並添加一些元件上it.for例如,如何在C#中以相反順序(從上到下)迭代字典<string,string>?

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

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

在C#,字典保持在自然要素order.But我現在想從最後迭代這些值的第一(即,反向順序)。我的意思是,

首先我想讀ytye然後顯示,gdlh,最後是內容。

請指引我走出這個問題...

+3

幽州* 「在C#,字典保持在自然順序元​​素」 *。這是不正確的。 [註釋部分](http://msdn.microsoft.com/en-us/library/xfhwa508.aspx)狀態*「項目返回的順序是未定義的。」* – 2012-04-16 11:52:31

+1

@Daniel Hilgarth這是我的初始思想,我評論如此,但刪除它,因爲我測試了一些代碼,它的工作原理。所以我做了更多的研究。如果強制字典調整大小,最終可能會在插入過程中對元素進行重新排序。 SortedDictionary指的是鍵的順序,但你可以給它一個比較器... OrderedDictionary是非泛型的,但可能是他需要的。 – 2012-04-16 12:22:36

+0

我對此有一個巨大的爭論 - 雖然標準字典*中枚舉條目的「順序」基本上是您將它們放入的順序,但這不是保證行爲!假設情況總是如此,這是非常不明智的。 – JerKimball 2012-11-28 20:23:44

回答

14

只需使用LINQ的擴展方法Reverse

例如

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

使用LINQ反轉,但要注意,不反向到位

var reversed = d.Reverse(); 

但是請注意,這不是一個SortedDictionary,所以順序不一定在第一保證地點。也許你想要OrderByDescending而不是?

+0

+1表示不能保證字典中的順序。 – 2012-04-16 11:50:12

0

它可使用LINQ:d.Reverse()

3

的關鍵也許OrderByDescending。就像這樣:

d.OrderByDescending (x =>x.Key) 

Foreach這樣的:

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

} 
相關問題