【C#】ディクショナリ(Dictionary)のキーを昇順に並べ替えて列挙する

C#

ディクショナリ(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}");
}

まとめ

本記事では、ディクショナリのキーを昇順に並べ替えて、キーと値を列挙する方法を紹介しました。リストに変換(または格納)してソートする処理は応用が利きますので、ご活用ください。

タイトルとURLをコピーしました