[英]Sort Dictionary (string, int) by value
所以基本上我遇到了我已經給出的任務的問題。 我不會厭倦任務本身的細節,所以我只會給你相關的信息。
我有一本字典,我需要按最高的int [value]排序,准確地排在前五位,我需要能夠顯示底部的五位。
Dictionary<string, int> dict = new Dictionary<string, int>();
字符串(鍵)包含已為文本文件讀取的單詞。 整數(值)包含文檔中提到它們的次數。
我打算用另一種方式做,但我被告知要用字典做,所以請字典只幫助。 我很感激,如果你能解釋它應該怎么做,這樣我就可以學習並完成任務,因為任務的目的是教育自己,但我發現它有點難...
我提前感謝您的幫助,如果需要更多信息,請告訴我,我會發布!
字典沒有任何固有的順序。 但是如果你想獲得具有最高(或最低)值的前5個條目,你可以使用一點Linq:
using System.Linq;
...
var top5 = dict.OrderByDescending(pair => pair.Value).Take(5);
var bottom5 = dict.OrderBy(pair => pair.Value).Take(5);
這將返回IEnumerable<KeyValuePair<string, int>>
。 要把它變回字典,Linq再次可以提供幫助。 例如:
var top5 = dict.OrderByDescending(pair => pair.Value).Take(5)
.ToDictionary(pair => pair.Key, pair => pair.Value);
現在, top5
是一個Dictionary<string, int>
,它只包含dict
具有最高值的5個元素。
你需要從你的字典里得到有序的結果,因為你正在尋找前5,您將需要Take
這樣的:
//Top 5
foreach (var item in dict.OrderByDescending(r => r.Value).Take(5))
{
Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
}
你需要OrderBy的原因是因為:
Dictionary<TKey, TValue> Class
出於枚舉的目的,字典中的每個項都被視為表示值及其鍵的KeyValuePair結構。 返回項的順序未定義。
如果您使用的是C#3.0及更高版本
您可以使用LINQ
執行類似的操作
foreach (KeyValuePair<string,int> item in keywordCounts.OrderBy(key=> key.Value).Take(5))
{
// do something with item.Key and item.Value
}
如果您使用的是C#2.0
List<KeyValuePair<string, string>> myList = aDictionary.ToList();
myList.Sort((firstPair,nextPair) =>
{
return firstPair.Value.CompareTo(nextPair.Value);
}
);
或者可以改寫為
myList.Sort((x,y)=>x.Value.CompareTo(y.Value));
LINQ
允許很大的靈活性,你可以選擇前10個,20個10%等。或者如果你使用單詞頻率索引進行預先輸入,你也可以包括StartsWith子句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.