本記事では、C#におけるディクショナリ(Dictionary)の使い方について紹介します。
ディクショナリ(Dictionary)とは
ディクショナリは、キーと値のペアをセットで記憶するデータ構造です。ディクショナリで実現できる機能の例としては、電子メールのアドレス帳があります。
名前 | メールアドレス |
yamada | yamada@example.com |
tanaka | tanaka@example.com |
suzuki | suzuki@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)の基本的な使い方について紹介しました。ディクショナリを使うことにより処理を簡潔に記述できるため、その扱いに慣れることは非常に価値があると感じます。