2015-11-20 168 views
0

我正在排序一個字典,其中包含值爲&的按鍵。我有一個單詞和時間數量的散列,我想按照使用的時間數量排序。C#按值排序字典

有一個SortedList對單個值很有用,我想將它映射回單詞。

SortedDictionary按鍵排序,不是值。

我可以使用自定義類,有沒有更好的方法。

我做了一些谷歌搜索,但我無法找到我正在尋找什麼。

+5

'Dictionary'未按設計排序。排序它沒有意義。你打算如何使用它?展示實際示例,我們將嘗試找到最優化的集合\解決方案。 –

+0

您需要將您的字典(根據定義,未排序)複製到其他集合(例如列表)中,然後對第二個集合進行排序。看看.Net方法[.toList()](http://www.dotnetperls.com/tolist) – paulsm4

回答

3

我找到了答案

List<KeyValuePair<string, string>> BillsList = aDictionary.ToList(); 

BillsList.Sort(delegate(KeyValuePair<string, string> firstPair, 
    KeyValuePair<string, string> nextPair) 
    { 
     return firstPair.Value.CompareTo(nextPair.Value); 
    } 
); 
+1

你可以使用lambda使其更簡單。 'BillsList.Sort((firstPair,nextPair)=> firstPair.Value.CompareTo(nextPair.Value));' –

4

這應做到:

Dictionary<string, string> d = new Dictionary<string, string> 
{ 
    {"A","Z"}, 
    {"B","Y"}, 
    {"C","X"} 
}; 

d.OrderBy(x=>x.Value).Select(x=>x.Key); 

將返回C,B,A

1

下面是使用LINQ和計數映射到Word :

IDictionary<string, int> wordsAndCount = new Dictionary<string, int> 
{ 
    {"Batman", 987987987}, 
    {"MeaningOfLife",42}, 
    {"Fun",69}, 
    {"Relaxing",420}, 
    {"This", 2} 
}; 

var result = wordsAndCount.OrderBy(d => d.Value).Select(d => new 
{ 
    Word = d.Key, 
    Count = d.Value 
}); 

R esult: enter image description here

+0

示例鍵值對 –