2012-04-16 8 views
9

私は1つの辞書を持っているとit.for例のいくつかの要素を追加し、C#ので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"); 

、辞書は、自然の要素を保持しorder.But私は今、最後の最初(すなわち、反転させるためにそれらの値を反復処理したいです).i平均、

最初に私はytye、次にgdlh、そして最後にContentを読みたいと思っています。

+3

あなたの状態* * "C#のでは、辞書は、自然な順序で要素を保持します"。それは正しくありません。 [備考セクション](http://msdn.microsoft.com/en-us/library/xfhwa508.aspx)は、「アイテムが返される順序は未定義です。」* –

+1

@Daniel Hilgarthこれは私の初期のものでした私はそのようにコメントしましたが、いくつかのコードをテストしたので、削除しました。だから私はもう少し研究をしました。最終的には、辞書のサイズ変更を強制すると、挿入中に要素を並べ替えることができます。 SortedDictionaryはキーの順序を参照していますが、比較元に渡すことはできます... OrderedDictionaryは非ジェネリックですが、必要なものかもしれません。 –

+0

標準的な辞書*の列挙されたエントリの "順序"は基本的にあなたがそれらを入れた順序ですが、これは一度だけ大きな引数になりました。これは保証されていません!これが常にそうであると仮定することは非常に賢明ではありません。 – JerKimball

答えて

14

ただ、LINQの拡張メソッドReverse

例えばを使用して...私はこの問題から抜け出すために案内してください。

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

使用LINQリバースが、場所でないリバースんのでご注意:

var reversed = d.Reverse(); 

をしかし、これはSortedDictionaryないので、順序は、必ずしも最初に保証されないことに注意してください場所。代わりにOrderByDescendingが代わりに必要なのでしょうか?

+0

+1は、辞書の順序が保証されていないことに言及しています。 –

0

これは、LINQので利用可能です:キーのd.Reverse()

3

たぶんOrderByDescending。このように:このような

d.OrderByDescending (x =>x.Key) 

Foreach

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

} 
関連する問題