1. ホーム
  2. c#

[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?

2022-03-21 09:12:57

質問

辞書(key & valueで構成)を値でソートする必要があることがよくあります。例えば、単語とそれぞれの頻度のハッシュを持っていて、頻度の高い順に並べたいのです。

には SortedList これは一つの値(例えば頻度)に適しており、それを単語にマップバックしたいのです。

SortedDictionary 値ではなく、キーで注文する。ある人は カスタムクラス しかし、もっと簡単な方法はないのでしょうか?

どのように解決するのですか?

使用する。

using System.Linq.Enumerable;
...
List<KeyValuePair<string, string>> myList = aDictionary.ToList();

myList.Sort(
    delegate(KeyValuePair<string, string> pair1,
    KeyValuePair<string, string> pair2)
    {
        return pair1.Value.CompareTo(pair2.Value);
    }
);

.NET 2.0以上をターゲットにしているので、これを簡略化してラムダ構文にすることができます(同等ですが、より短くなります)。.NET 2.0をターゲットにしている場合、この構文はVisual Studio 2008(またはそれ以上)のコンパイラーを使用している場合のみ使用できます。

var myList = aDictionary.ToList();

myList.Sort((pair1,pair2) => pair1.Value.CompareTo(pair2.Value));