Day11 前半のゴール
Day11 前半では、キーと値をセットで管理できる Dictionary<TKey, TValue> を学びます。 Dictionary は「名前 → 電話番号」「学生ID → 点数」のように、 何かの“ラベル(キー)”でデータを素早く取り出したいときに使う、とても強力な仕組みです。
ここでは次の内容を、初心者向けにかみ砕いて解説していきます。
Dictionary<TKey, TValue> の考え方 Add で登録する Remove で削除する ContainsKey で存在確認をする
電話帳や学生成績管理のような、現実の場面をイメージしながら理解していきます。
Dictionary<TKey, TValue> を理解する
キーと値のペアで管理するという発想
Dictionary は「キー(Key)と値(Value)のペア」をまとめて管理するコレクションです。 イメージとしては「辞書」や「電話帳」に近く、
名前 → 電話番号 単語 → 意味 学生ID → 点数
といった形で、「キーから値を一瞬で取り出す」ことができます。
C# では次のように宣言します。
Dictionary<string, string> phoneBook = new Dictionary<string, string>();
C#この例では、キーも値も string 型です。 「名前(string)→ 電話番号(string)」という構造の電話帳を作っているイメージになります。
型パラメータ TKey, TValue の意味
Dictionary<TKey, TValue> の <TKey, TValue> は、 「キーの型」と「値の型」を表しています。
例えば次のようなパターンがあります。
Dictionary<string, int> scores = new Dictionary<string, int>(); // 名前 → 点数
Dictionary<int, string> users = new Dictionary<int, string>(); // ID → 名前
C#ここで重要なのは、 「キーは重複できない」「キーから値を高速に取り出せる」 という点です。
リスト(List)や配列は「位置(インデックス)」で取り出しますが、 Dictionary は「キー」で取り出す、という違いがあります。
Add でデータを登録する
電話帳に登録するイメージで理解する
Dictionary にデータを追加するときは、Add メソッドを使います。
Dictionary<string, string> phoneBook = new Dictionary<string, string>();
phoneBook.Add("Taro", "090-1111-2222");
phoneBook.Add("Hanako", "080-3333-4444");
C#ここでは、
“Taro” → “090-1111-2222” “Hanako” → “080-3333-4444”
というペアが登録されます。
キーを使って値を取り出す
登録した後は、キーを使って値を取り出せます。
Console.WriteLine(phoneBook["Taro"]); // 090-1111-2222
C#ここで深掘りしたいポイントは、 インデックスの代わりに「キー」を使っている ということです。
List や配列では list[0] のように数字でアクセスしましたが、 Dictionary では phoneBook["Taro"] のように「意味のあるキー」でアクセスします。
Remove でデータを削除する
電話帳から登録を消すイメージ
登録済みのデータを削除したいときは、Remove を使います。
phoneBook.Remove("Taro");
C#これで “Taro” のエントリ(名前と電話番号のペア)が削除されます。
削除後に phoneBook["Taro"] を呼び出そうとすると、 キーが存在しないためエラーになる可能性があります。
そのため、実務では「削除前に存在確認をする」ことがとても重要です。
ContainsKey で存在確認をする
安全にアクセスするための必須テクニック
Dictionary でよくあるエラーが、 「存在しないキーにアクセスしてしまう」ことです。
これを防ぐために使うのが ContainsKey です。
if (phoneBook.ContainsKey("Taro"))
{
Console.WriteLine(phoneBook["Taro"]);
}
else
{
Console.WriteLine("Taro は登録されていません");
}
C#ContainsKey は「そのキーが登録されているかどうか」を true / false で返します。
ここで深掘りしたいポイントは、 Dictionary にアクセスするときは、基本的に ContainsKey とセットで考える ということです。
「あるかどうか確認してから取り出す」という流れを習慣にすると、 エラーの少ない安全なコードを書けるようになります。
電話帳のイメージでまとめて理解する
名前 → 電話番号の構造で整理する
ここまでの内容を「電話帳」という具体的なイメージでまとめると、次のようになります。
Dictionary<string, string> phoneBook = new Dictionary<string, string>();
// 追加
phoneBook.Add("Taro", "090-1111-2222");
phoneBook.Add("Hanako", "080-3333-4444");
// 取り出し(存在確認付き)
if (phoneBook.ContainsKey("Taro"))
{
Console.WriteLine("Taro の番号: " + phoneBook["Taro"]);
}
// 削除
phoneBook.Remove("Hanako");
C#このように、
Dictionary → 電話帳そのもの キー(string)→ 名前 値(string)→ 電話番号
という形で考えると、Dictionary の役割がとてもわかりやすくなります。
学生成績管理へのつながりをイメージする
名前 → 点数、ID → 点数という構造
学生成績管理では、
学生の名前 → テストの点数 学生ID → テストの点数
という形でデータを管理することが多いです。
これはまさに Dictionary の得意分野で、
Dictionary<string, int> scores = new Dictionary<string, int>();
C#のように宣言して、
Add で登録 ContainsKey で存在確認 キーで点数を取り出す
という流れで扱うことができます。
後半では、この「電話帳」と「学生成績管理」を実際のコードとして組み立てながら、 Dictionary の使い方をさらに深く理解していきます。
