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

C#

サンプルコード

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>
            {
                {"yamada", "yamada@example.com"},
                {"sato", "sato@example.com"},
                {"tanaka", "tanaka@example.com"},
                {"ando", "ando@example.com"}
            };

            // キーを昇順に並べ替える
            var sortedKeys = emailDic.Keys.OrderBy(key => key);

            // 並べ替えた順番に列挙する
            foreach (string key in sortedKeys)
            {
                Console.WriteLine($"Key: {key}, Value: {emailDic[key]}");
            }
        }
    }
}

実行結果

Key: ando, Value: ando@example.com
Key: sato, Value: sato@example.com
Key: tanaka, Value: tanaka@example.com
Key: yamada, Value: yamada@example.com

キーの並べ替えについて

本サンプルではOrderByメソッドを使ってキーの並べ替えを行っています。

var sortedKeys = emailDic.Keys.OrderBy(key => key);

OrderByメソッドは、C#のLINQ(Language Integrated Query)機能の一部で、コレクションの要素を特定の条件に基づいて並べ替えるために使われます。このメソッドの引数には、並べ替えの基準となるキーを選択するためのラムダ式や関数デリゲートが渡されます。

基本的な書き方は次のようになります。

var sortedCollection = collection.OrderBy(element => element.Property);

上記において、collectionは並べ替える対象のコレクション、elementはコレクション内の各要素、Propertyはその要素の並べ替えの基準となるプロパティまたはフィールドです。

最初に示したサンプルコードでは OrderBy(key => key) としていますが、これはそのキー自体を基準にして並べ替えを行うことを意味します。ここで使われる「=>」はラムダ式の記法で、左側の「key」はコレクションの各要素を表し、右側の「key」はその要素をそのまま並べ替えの基準として使うことを示しています。

たとえば、以下のようなコードがある場合

var sortedKeys = dictionary.Keys.OrderBy(key => key);

dictionary.Keysコレクションの各要素(ここではキー)がkeyの値そのものによって昇順に並べ替えられます。これは文字列のキーであればアルファベット順、数値のキーであれば数値の大小順になります。

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