Categories: Cシャープ

C#のDictionary徹底解説!基本から応用までわかりやすく紹介

C#で効率的にデータを管理したいときに活躍するのが、Dictionary<TKey, TValue>です。キーと値のペアでデータを保持できるDictionaryは、リストや配列では実現しにくい高速な検索や管理が可能です。この記事では、C#におけるDictionaryの基本的な使い方から、便利なメソッドや注意点まで、初学者にもわかりやすく丁寧に解説していきます。これからC#を学ぶ方や、辞書型コレクションを使いこなしたい方に役立つ内容となっています。


Dictionaryとは?

Dictionaryは、キーと値の組み合わせでデータを管理するコレクションです。C#のSystem.Collections.Generic名前空間に属しており、以下のように宣言して使います。

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

この例では、キーが文字列(string)、値が整数(int)となっています。キーを指定して値をすばやく取得できる点が大きな特徴です。


Dictionaryの基本操作

要素の追加

Dictionaryにデータを追加するには、Addメソッドを使います。

scores.Add("Alice", 90);
scores.Add("Bob", 85);

または、インデクサーを使って次のようにも書けます。

scores["Charlie"] = 92;

この書き方では、キーが存在しなければ新しい要素が追加され、存在する場合は値が更新されます。


値の取得

既存のキーに対応する値を取得するには、次のようにインデクサーを使用します。

int aliceScore = scores["Alice"];
Console.WriteLine(aliceScore); // 出力: 90

ただし、指定したキーが存在しない場合は例外がスローされるため、ContainsKeyメソッドで確認しておくと安全です。

if (scores.ContainsKey("David")) {
Console.WriteLine(scores["David"]);
} else {
Console.WriteLine("Davidのスコアは見つかりませんでした。");
}

要素の更新

既存のキーに対して新しい値を設定する場合も、インデクサーを使って簡単に行えます。

scores["Alice"] = 95;

要素の削除

要素を削除するには、Removeメソッドを使います。

scores.Remove("Bob");

指定したキーが存在する場合、そのキーと対応する値が削除されます。存在しない場合は何も起こりません。


Dictionaryの便利なメソッド

TryGetValueで安全に値を取得

TryGetValueを使うと、例外処理なしで安全に値を取得できます。

if (scores.TryGetValue("Charlie", out int charlieScore)) {
Console.WriteLine($"Charlieのスコア: {charlieScore}");
} else {
Console.WriteLine("Charlieは見つかりませんでした。");
}

Countプロパティで要素数を取得

Dictionaryに何件のデータが格納されているかは、Countプロパティで確認できます。

Console.WriteLine($"データ件数: {scores.Count}");

全データの列挙

Dictionaryのすべての要素をループで処理するには、foreach文が使えます。

foreach (KeyValuePair<string, int> pair in scores) {
Console.WriteLine($"{pair.Key} : {pair.Value}");
}

または、タプルのような記法で記述することもできます。

foreach (var (name, score) in scores) {
Console.WriteLine($"{name}のスコアは{score}");
}

初期化時に要素を設定する

Dictionaryは、定義と同時に初期データを設定することもできます。

var fruits = new Dictionary<string, int> {
{ "Apple", 3 },
{ "Banana", 5 },
{ "Orange", 2 }
};

この書き方は、少量の固定データを扱うときに便利です。


Dictionaryを使う際の注意点

キーの重複に注意

同じキーをAddで追加しようとすると例外がスローされます。すでに存在するキーに値を設定したい場合はインデクサーを使うようにしましょう。

// エラーになる
// scores.Add("Alice", 100);

// 正しい方法
scores["Alice"] = 100;

順序は保証されない

Dictionaryの内部構造はハッシュテーブルなので、要素の順序は保証されません。順序を保持したい場合はSortedDictionaryOrderedDictionaryの利用を検討してください。


nullのキーは使えない

Dictionaryでは、キーにnullを使うことはできません。ArgumentNullExceptionがスローされるため、事前にチェックが必要です。


応用:ネストされたDictionaryの使用例

複雑なデータ構造を扱いたい場合、Dictionaryの中にDictionaryを入れることも可能です。

var studentData = new Dictionary<string, Dictionary<string, int>> {
{
"Alice", new Dictionary<string, int> {
{ "Math", 90 },
{ "English", 85 }
}
},
{
"Bob", new Dictionary<string, int> {
{ "Math", 75 },
{ "English", 80 }
}
}
};

アクセスは次のように行います。

int mathScore = studentData["Alice"]["Math"];
Console.WriteLine($"Aliceの数学の点数: {mathScore}");

まとめ

C#のDictionary<TKey, TValue>は、キーによって値を高速に管理・検索できる非常に便利なコレクションです。基本的な使い方をマスターすれば、より複雑なデータ管理にも対応できるようになります。今回紹介した内容を活用して、あなたのC#プログラムをより効率的でスマートにしていきましょう。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。