C#で辞書を値でソートするコード例
C#で辞書を値でソートする方法
**C#**において、辞書(Dictionary)の要素を値でソートするには、通常以下の手順を踏みます。
- 値とキーのペアを格納する新しいリストを作成する。
- 元の辞書の各要素を新しいリストに追加する。
- 新しいリストを値でソートする。
- ソートされたリストからキーと値を抽出する。
コード例
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
// 辞書を作成
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
myDictionary.Add("apple", 3);
myDictionary.Add("banana", 2);
myDictionary.Add("orange", 5);
// 値とキーのペアを格納する新しいリストを作成
List<KeyValuePair<string, int>> sortedList = myDictionary.ToList();
// 値でソート
sortedList.Sort((x, y) => x.Value.CompareTo(y.Value));
// ソートされたリストからキーと値を抽出
foreach (var item in sortedList)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
}
解説
Dictionary<string, int>
: 辞書を作成します。キーは文字列、値は整数型です。ToList()
: 辞書の要素をリストに変換します。Sort()
: リストをソートします。引数には、比較関数(ラムダ式)を指定します。この関数は、2つの要素を比較し、ソート順を決定します。CompareTo()
: 値を比較します。昇順ソートの場合はx.Value.CompareTo(y.Value)
、降順ソートの場合はy.Value.CompareTo(x.Value)
を使用します。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
// 辞書を作成
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
myDictionary.Add("apple", 3);
myDictionary.Add("banana", 2);
myDictionary.Add("orange", 5);
// 値とキーのペアを格納する新しいリストを作成
List<KeyValuePair<string, int>> sortedList = myDictionary.ToList();
// 値でソート
sortedList.Sort((x, y) => x.Value.CompareTo(y.Value));
// ソートされたリストからキーと値を抽出
foreach (var item in sortedList)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
}
}
LINQを使用する
LINQ(Language-Integrated Query)は、C#の言語統合クエリ機能です。辞書をソートするには、OrderBy
メソッドを使用します。
var sortedDictionary = myDictionary.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
SortedDictionaryを使用する
SortedDictionary
クラスは、キーをソートして格納する辞書です。デフォルトではキーでソートされますが、比較子を指定することで値でソートすることもできます。
var sortedDictionary = new SortedDictionary<string, int>(Comparer<int>.Create((x, y) => y.CompareTo(x)));
foreach (var item in myDictionary)
{
sortedDictionary.Add(item.Key, item.Value);
}
SortedListを使用する
var sortedList = new SortedList<string, int>(Comparer<int>.Create((x, y) => y.CompareTo(x)));
foreach (var item in myDictionary)
{
sortedList.Add(item.Key, item.Value);
}
カスタム比較器を使用する
独自の比較器を作成して、辞書をソートすることもできます。
class ValueComparer : IComparer<KeyValuePair<string, int>>
{
public int Compare(KeyValuePair<string, int> x, KeyValuePair<string, int> y)
{
return x.Value.CompareTo( y.Value);
}
}
var sortedDictionary = new SortedDictionary<string, int>(new ValueComparer());
foreach (var item in myDictionary)
{
sortedDictionary.Add(item.Key, item.Value);
}
c# .net sorting