2014-02-23 64 views
0

我追蹤了一些關於已排序字典的信息,因爲我之前從未使用過任何非常詳細的信息。Sorted dictionaries

從我讀過的關於他們的文章中,他們根據他們的關鍵價值對自己進行分類。那是對的嗎?另外,字典是否會根據讀入的值不斷自動排序?

如果是這樣,是否有一種方法可以更改此字典,以便字典通過與鍵相關的值進行排序。例如,我有以下的排序詞典:

Key: 4 Value: 40 
Key: 1 Value: 290 
Key: 86 Value: 7 

的有序字典會像這樣排序是:

Key: 1 Value: 290 
Key: 4 Value: 40 
Key: 86 Value: 7 

但我想爲它做了以下幾點:

Key: 86 Value: 7 
Key: 4 Value: 40 
Key: 1 Value: 290 

最後,我將如何去訪問這個排序的第一和第二點,以便我可以將它們分配給其他東西?

+3

可能重複價值?](http://stackoverflow.com/questions/289/how-do-you-sort-a-dictionary-by-value) – dcastro

+1

在.NET框架中沒有集合自動執行此操作。你需要排序詞典,只要你需要它進行排序,如[見] [ 。 – dcastro

回答

0

默認SortedDictionary<TKey, TValue>基於該Key而不是由ValueSorting

,但如果你想有根據的Value排序,你可以使用LINQ OrderBy()方法asbelow:

從MSDN:SortedDictionary

表示鍵/值對的集合,排序上鑰匙。

試試這個:

var SortedByValueDict = dict.OrderBy(item => item.Value); 

完整代碼:

class Program 
{ 
static void Main(string[] args) 
{ 
    SortedDictionary<int, int> dict = new SortedDictionary<int, int>(); 
    dict.Add(4, 40); 
    dict.Add(1, 290); 
    dict.Add(86, 7); 

    Console.WriteLine("Sorted Dictionary Items sorted by Key"); 
    foreach (var v in dict) 
    { 
    Console.WriteLine("Key = {0} and Value = {1}", v.Key, v.Value); 
    } 

    Console.WriteLine("------------------------\n"); 
    Console.WriteLine("Sorted Dictionary Items sorted by Value"); 
    var SortedByValueDict = dict.OrderBy(item => item.Value); 

    foreach (var v in SortedByValueDict) 
    { 
    Console.WriteLine("Key = {0} and Value = {1}", v.Key, v.Value); 
    } 
} 
} 

輸出:

Sorted Dictionary Items sorted by Key 
Key = 1 and Value = 290 
Key = 4 and Value = 40 
Key = 86 and Value = 7 
------------------------ 

Sorted Dictionary Items sorted by Value 
Key = 86 and Value = 7 
Key = 4 and Value = 40 
Key = 1 and Value = 290 
的[你如何排序的字典