【C#】ディクショナリ(Dictionary)の使い方

C#

本記事では、C#におけるディクショナリ(Dictionary)の使い方について紹介します。

ディクショナリ(Dictionary)とは

ディクショナリは、キーと値のペアをセットで記憶するデータ構造です。ディクショナリで実現できる機能の例としては、電子メールのアドレス帳があります。

名前メールアドレス
yamadayamada@example.com
tanakatanaka@example.com
suzukisuzuki@example.com
電子メールのアドレス帳

電子メールのアドレス帳の場合は、人の名前(キー)とメールアドレス(値)を紐づけて保存します。名前を知っていれば、ディクショナリを使って対応するメールアドレスをすぐに探すことができます。

サンプルコード

以下は人の名前(キー)とメールアドレスを記憶するアドレスブックの例です。

using System;
using System.Collections.Generic;

namespace DictionaryExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // ディクショナリの初期化
            Dictionary<string, string> emailDic = new Dictionary<string, string>();

            // ディクショナリに要素を追加
            emailDic["yamada"] = "yamada@example.com";
            emailDic["tanaka"] = "tanaka@example.com";
            emailDic["suzuki"] = "suzuki@example.com";

            // 名前に対応するメールアドレスがあるかを存在チェック
            if (emailDic.ContainsKey("yamada"))
            {
                string email = emailDic["yamada"];
                Console.WriteLine($"yamadaのメールアドレス:{email}"); // 出力: yamada@example.com
            }
            else
            {
                Console.WriteLine("キーが存在しません。");
            }

            // 要素の削除
            emailDic.Remove("tanaka");

            // 名前とメールアドレスのセットを一覧表示
            Console.WriteLine("-- アドレス帳 --");
            foreach (string name in emailDic.Keys)
            {
                Console.WriteLine($"{name}, {emailDic[name]}");
            }
        }
    }
}

実行結果

yamadaのメールアドレス:yamada@example.com
-- アドレス帳 --
yamada, yamada@example.com
suzuki, suzuki@example.com
続行するには何かキーを押してください . . .

各部の解説

ディクショナリの宣言

文字列のキーと、文字列の値を持つディクショナリは以下のように作成できます。

Dictionary<string, string> emailDic = new Dictionary<string, string>();

要素の追加とアクセス

ディクショナリへの要素の追加は、以下のように記述できます。(要素の追加について、C#の古いバージョンではAddメソッドを使っていましたが、現在はemailDic[キー]=値のように記述すれば要素を追加できます)

emailDic["yamada"] = "yamada@example.com";
emailDic["tanaka"] = "tanaka@example.com";
emailDic["suzuki"] = "suzuki@example.com";

ディクショナリからキーに対応する値を取得する場合は、以下のように記述します。

string email = emailDic["yamada"];
Console.WriteLine($"yamadaのメールアドレス:{email}");

要素の存在チェック

ディクショナリに特定のキーが存在するかどうかを確認するには、ContainsKeyメソッドを使用します。たとえば、今回の例では登場しない”suzuki”のメールアドレスの存在確認を以下のように記述すると、”キーが存在しません。”と表示されます。

if (emailDic.ContainsKey("suzuki"))
{
    Console.WriteLine(emailDic["suzuki"]);
}
else
{
    Console.WriteLine("キーが存在しません。");
}

要素の削除

指定したキーの要素を削除する場合、Removeメソッドを使用します。Removeメソッドを実行すると、キーと値のセットで削除されます。

emailDic.Remove("tanaka");

ディクショナリ要素の列挙(ループ処理)

ディクショナリのすべての要素をループで処理するには、foreachループを使用します。emailDic.Keysによりキー(名前)の一覧をループで回し、サンプルコードでは、名前に対応するメールアドレスをConsole.WriteLineで表示しています。

foreach (string name in emailDic.Keys)
{
    Console.WriteLine($"{name}, {emailDic[name]}");
}

ディクショナリで扱える型

ディクショナリでは、様々な型のペアを扱うことができます。以下は、その一例です。

フルーツの名前と個数を扱うディクショナリ
キーにフルーツの名前、値に個数を持つため、Dictionary<string, int>と宣言します。フルーツの名前をキーにディクショナリにアクセスすることで、素早く個数を取り出すことができます。

Dictionary<string, int> fruitsNumDic = new Dictionary<string, int>();

生徒の出席番号と氏名を扱うディクショナリ
キーに出席番号、値に名前を持つため、Dictionary<int, string>と宣言します。出席番号をキーに入力すると、素早く生徒の氏名を取り出すことができます。

Dictionary<int, string> idNameDic = new Dictionary<int, string>();

まとめ

本記事では、C#におけるディクショナリ(Dictionary)の基本的な使い方について紹介しました。ディクショナリを使うことにより処理を簡潔に記述できるため、その扱いに慣れることは非常に価値があると感じます。

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