簡體   English   中英

按值排序字典(字符串,整數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM