C# | ゼロからはじめるプログラミング、30日で基礎を学ぶC#:基本機能を身に付ける - Day11:Dictionary

C# 30日で身につけるC#
スポンサーリンク
スポンサーリンク

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 の使い方をさらに深く理解していきます。

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