9

OrderedDictionary (System.Collections.Specialized) を並べ替える必要があります。次のコードがあります。

var od = new System.Collections.Specialized.OrderedDictionary();
od.Add("a1", 3);
od.Add("a2", 5);
od.Add("a3", 2);
od.Add("a4", 4);

値を使用して並べ替えたい。Linq を使用して実行できますか?

4

2 に答える 2

8

以下は、OrderedDictionary に基づいてソートされた辞書を提供します。

var normalOrderedDictionary= od.Cast<DictionaryEntry>()
                       .OrderBy(r=> r.Value)
                       .ToDictionary(c=> c.Key, d=> d.Value);

ただし、ToDictionary通常のディクショナリを返しましたが、ルックアップのためにディクショナリで順序が維持されます。新しいアイテムがディクショナリに挿入されるとすぐに、順序は保証されません。これを回避するSortedDictionary<TKey,TValue>には、通常の辞書をパラメーターとして受け取るコンストラクターを持つ which を使用します

var sortedDictionary = new SortedDictionary<string, string>(normalOrderedDictionary);

string(上記の行のキーと値を正しいタイプに置き換えてください) 。

出力:

foreach (var entry in sortedDictionary)
    Console.WriteLine("Key: {0} Value: {1}", entry.Key, entry.Value);

Key: a3 Value: 2
Key: a1 Value: 3
Key: a4 Value: 4
Key: a2 Value: 5
于 2012-12-12T06:24:26.380 に答える
3

値/エントリを値で簡単に列挙できます。linq機能をアクティブにするには、適切なタイプにキャストする必要があります。

var sortedOrder = od.Values
    .Cast<int>()        // this is an enumeration of ints
    .OrderBy(i => i);;  // enumerate through ordered by the value

foreach (var item in sortedOrder)
{
    // do stuff
}
于 2012-12-12T06:20:58.387 に答える