C#で効率的にデータを管理したいときに活躍するのが、Dictionary<TKey, TValue>
です。キーと値のペアでデータを保持できるDictionaryは、リストや配列では実現しにくい高速な検索や管理が可能です。この記事では、C#におけるDictionaryの基本的な使い方から、便利なメソッドや注意点まで、初学者にもわかりやすく丁寧に解説していきます。これからC#を学ぶ方や、辞書型コレクションを使いこなしたい方に役立つ内容となっています。
Dictionaryは、キーと値の組み合わせでデータを管理するコレクションです。C#のSystem.Collections.Generic
名前空間に属しており、以下のように宣言して使います。
Dictionary<string, int> scores = new Dictionary<string, int>();
この例では、キーが文字列(string)、値が整数(int)となっています。キーを指定して値をすばやく取得できる点が大きな特徴です。
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");
指定したキーが存在する場合、そのキーと対応する値が削除されます。存在しない場合は何も起こりません。
TryGetValue
を使うと、例外処理なしで安全に値を取得できます。
if (scores.TryGetValue("Charlie", out int charlieScore)) {
Console.WriteLine($"Charlieのスコア: {charlieScore}");
} else {
Console.WriteLine("Charlieは見つかりませんでした。");
}
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 }
};
この書き方は、少量の固定データを扱うときに便利です。
同じキーをAdd
で追加しようとすると例外がスローされます。すでに存在するキーに値を設定したい場合はインデクサーを使うようにしましょう。
// エラーになる
// scores.Add("Alice", 100);
// 正しい方法
scores["Alice"] = 100;
Dictionaryの内部構造はハッシュテーブルなので、要素の順序は保証されません。順序を保持したい場合はSortedDictionary
やOrderedDictionary
の利用を検討してください。
Dictionaryでは、キーにnull
を使うことはできません。ArgumentNullException
がスローされるため、事前にチェックが必要です。
複雑なデータ構造を扱いたい場合、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#プログラムをより効率的でスマートにしていきましょう。