ディクショナリ(Dictionary)を扱う処理において、データを整理してレポートを作成したいことがあります。たとえば、名前とメールアドレスを保持するアドレス帳を、名前順にソートして一覧表示する場合などです。
本記事では、ディクショナリのキーを昇順に並べ替えて、キーと値を列挙する方法を紹介します。
サンプルコード
以下は、名前とメールアドレスのディクショナリを使用し、名前でソートしてディクショナリの内容を一覧表示する例です。
using System;
using System.Linq; // OrderBy
using System.Collections.Generic;
namespace DictionaryExample
{
class Program
{
static void Main(string[] args)
{
// ディクショナリの初期化
Dictionary<string, string> emailDic = new Dictionary<string, string>
{
{ "carol", "carol@example.com" },
{ "alice", "alice@example.com" },
{ "bob", "bob@example.com" }
};
// キーを昇順に並べ替える
var sortedKeys = emailDic.Keys.ToList();
sortedKeys.Sort();
// 並べ替えた順番に列挙する
foreach (string name in sortedKeys)
{
Console.WriteLine($"{name}, {emailDic[name]}");
}
}
}
}
実行結果
alice, alice@example.com
bob, bob@example.com
carol, carol@example.com
キーの並べ替えについて
本サンプルでは、ディクショナリのキーをリストとして取得し、そのリストのSortメソッドを使用することによりキーの並べ替えを行っています。
var sortedKeys = emailDic.Keys.ToList();
sortedKeys.Sort();
値についても同様の処理が可能
キーと同様に、値についてもリストとして取得し、Sortメソッドで並べ替えることが可能です。
// 値を昇順に並べ替える
var sortedValues = emailDic.Values.ToList();
sortedValues.Sort();
// 並べ替えた順番に列挙する
foreach (string address in sortedValues)
{
Console.WriteLine($"{address}");
}
まとめ
本記事では、ディクショナリのキーを昇順に並べ替えて、キーと値を列挙する方法を紹介しました。リストに変換(または格納)してソートする処理は応用が利きますので、ご活用ください。