C# において、Dictionary はキーと値のペアを格納するデータ構造としてよく使われます。しかし、Dictionary のキーをソートすることは直接できず、ソートされた結果を取得するにはいくつかの方法があります。
本記事では、LINQ や SortedDictionary などを使って Dictionary をソートするための3つの方法を紹介します。
目次
Dictionary をソートして出力する3つの方法
1. キーをリストに変換してソートする方法
Dictionary のキーをリストに変換して、リストをソートする方法です。
以下のサンプルコードでは、Dictionary のキーを List に変換し、List をソートしています。
using System;
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
var dict = new Dictionary<int, string>()
{
{ 2, "banana" },
{ 3, "apple" },
{ 1, "orange" }
};
var sortedKeys = new List<int>(dict.Keys);
// 配列を昇順ソート
sortedKeys.Sort();
foreach (var key in sortedKeys)
{
Console.WriteLine("{0}: {1}", key, dict[key]);
}
}
}
出力結果
1: orange
2: banana
3: apple
降順ソートがしたい場合は、 Array.Sort
の後に Array.Reverse
を実行することで実現可能です。
var sortedKeys = new List<int>(dict.Keys);
// 配列を昇順ソート
Array.Sort(sortedKeys);
// 配列の順序を反転させる
Array.Reverse(sortedKeys);
出力結果
3: apple
2: banana
1: orange
2. LINQ を使用してソートする方法
Dictionary のキーをソートするもう1つの方法は、LINQ を使用する方法です。
以下のサンプルコードでは、Dictionary のキーを OrderBy メソッドを使用して昇順ソートしています。
using System;
using System.Collections.Generic;
using System.Linq;
public class Sample
{
public static void Main()
{
var dict = new Dictionary<int, string>()
{
{ 3, "apple" },
{ 2, "banana" },
{ 1, "orange" }
};
foreach (var key in dict.Keys.OrderBy(x => x))
{
Console.WriteLine("{0}: {1}", key, dict[key]);
}
}
}
出力結果
1: orange
2: banana
3: apple
降順ソートがしたい場合は、 OrderByDescending
を使用します。
foreach (var key in dict.Keys.OrderByDescending(x => x))
{
Console.WriteLine("{0}: {1}", key, dict[key]);
}
出力結果
3: apple
2: banana
1: orange
3. SortedDictionary を使ったソート方法
SortedDictionary は、Dictionary を自動的にソートしてくれる便利なクラスです。
通常の Dictionary と同様に一意のキーで要素にアクセスできますが、SortedDictionary はキーのソート順にアクセスできます。SortedDictionary は、通常の Dictionary と同様にO(1)の時間での挿入、削除、検索が可能ですが、SortedDictionary では追加された要素はソートされた状態に保たれます。
SortedDictionary を使用する場合、追加された要素は自動的にソートされるため、要素を取り出すときにはキーの昇順または降順でアクセスすることができます。SortedDictionary は通常、要素をキーのソート順に並べ替えたい場合に使用されます。
以下は、SortedDictionary を使用する簡単な例です。
using System;
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
// SortedDictionary の宣言
SortedDictionary<int, string> dictionary = new SortedDictionary<int, string>();
// キーと値の追加
dictionary.Add(3, "apple");
dictionary.Add(2, "banana");
dictionary.Add(1, "orange");
// キーでソートされた順序で要素にアクセス
foreach (var item in dictionary)
{
Console.WriteLine(item.Key + ": " + item.Value);
}
}
}
出力結果
1: orange
2: banana
3: apple
おわりに
以上、C #の Dictionary をソートする3つの方法を紹介しました。
Dictionary は非常に便利なデータ構造であり、キーに対応する値を素早く検索できます。
特に大規模なデータセットを扱う場合、効率的なソートアルゴリズムを使用することが重要です。また、Linq を使った方法はコードが短く簡潔に書けるため、小規模なデータセットに対しては有効です。
上記の方法を参考にして、自分のアプリケーションで Dictionary をソートしてみてください。