はじめての C# Dictionary —— まずは素直に書く、それから「TryGetValue」を知る
Dictionary(ディクショナリー)は、「名前から値を取り出す」ような場面で使うコレクションです。この記事では、授業で順番に試せるように、作成・追加・取り出し・繰り返し・確認・削除を一つずつ学び、最後に TryGetValue を紹介します。
最初に:Listとの違い
List はデータを順番に並べて管理します。一方、Dictionary はキー(名前)と値をセットで管理します。

| コレクション | 取り出し方 | 例 |
|---|---|---|
| List | 番号や条件で探す | 0番目の商品を取り出す |
| Dictionary | キーを指定する | 「にんじん」の価格を取り出す |
たとえば、商品の価格を「商品名 → 価格」の組み合わせで管理すると、prices["にんじん"] のように名前で取り出せます。検索方法や速度の違いを詳しく知りたい場合は、「ListとDictionaryでは検索速度に違いがある?」も参考にしてください。
1. Dictionaryとは
Dictionary<TKey, TValue> は、キーと値の組み合わせを管理します。
- TKey:探すためのキーの型
- TValue:保存する値の型
この記事では、商品名を string、価格を int として扱います。
Dictionary<string, int>
「文字列のキーと、整数の値を組み合わせるDictionary」という意味です。
2. Dictionaryを作成する
まず、空のDictionaryを作ります。
var prices = new Dictionary<string, int>();
この時点では、まだ商品は一つも登録されていません。コードの先頭では、必要に応じて次の名前空間を指定します。
using System.Collections.Generic;
最初からデータを入れて作る「初期化」の書き方もあります。書き方の違いは、発展記事「Dictionary の初期化方法({} と [] の違い)」で確認できます。
3. Addで追加する
Add メソッドを使って、キーと値を追加します。
prices.Add("にんじん", 100);
prices.Add("だいこん", 200);
prices.Add("たまねぎ", 150);
左側がキー、右側が値です。同じキーを2回 Add するとエラーになるため、キーは重複しないようにします。
授業のポイント:「にんじん」という名前と「100円」という値が、ひと組になって保存されています。
4. キーを指定して値を取り出す
角かっこ [] の中にキーを書くと、対応する値を取り出せます。
int price = prices["にんじん"];
Console.WriteLine(price);
実行結果は次のとおりです。
100
prices["にんじん"] = 120; のように代入すると、登録済みの値を変更できます。ただし、登録されていないキーを取り出そうとすると KeyNotFoundException が発生します。安全な確認方法は「6. ContainsKey」で扱います。
5. foreachですべて表示する
foreach を使うと、登録されているキーと値を順番に取り出せます。
foreach (var pair in prices)
{
Console.WriteLine($"{pair.Key}:{pair.Value}円");
}
pair.Key がキー、pair.Value が値です。
にんじん:100円
だいこん:200円
たまねぎ:150円
Dictionaryは「並び順」よりも「キーで取り出すこと」を目的に使います。特定の表示順が必要な場合は、並べ替えなどを別に考えます。
6. ContainsKeyでキーの有無を確認する
ContainsKey を使うと、キーが登録されているかを true または false で確認できます。
if (prices.ContainsKey("にんじん"))
{
Console.WriteLine(prices["にんじん"]);
}
else
{
Console.WriteLine("未登録です");
}
最初は、ContainsKeyで確認してから、角かっこで取り出すという流れで覚えると動きが分かりやすくなります。
7. Removeで削除する
Remove にキーを渡すと、そのキーと値の組み合わせを削除できます。
prices.Remove("だいこん");
削除できた場合は true、キーが見つからなかった場合は false が返ります。
bool removed = prices.Remove("だいこん");
Console.WriteLine(removed);
8. 最後にTryGetValueを知る
ContainsKey と角かっこを使う流れに慣れたら、TryGetValue も覚えておきましょう。キーの確認と値の取り出しを一度に行えます。
if (prices.TryGetValue("にんじん", out int price))
{
Console.WriteLine(price);
}
else
{
Console.WriteLine("未登録です");
}
見つかった場合は true になり、取り出した値が price に入ります。見つからない場合は false になります。
| 書き方 | 学習上の特徴 |
|---|---|
| ContainsKey → [] | 処理の流れが見えやすく、最初の学習に向く |
| TryGetValue | 確認と取り出しを一度に行え、実務でよく使う |
まとめて動かしてみよう
Visual Studioで「コンソール アプリ」を新規作成し、作成された Program.cs を開きます。ここまでの内容を使った次のコードに置き換え、まずは ContainsKey 版で動きを確認してみましょう。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var prices = new Dictionary<string, int>();
prices.Add("にんじん", 100);
prices.Add("だいこん", 200);
prices.Add("たまねぎ", 150);
Console.Write("商品名を入力してください:");
string? name = Console.ReadLine();
if (name != null && prices.ContainsKey(name))
{
Console.WriteLine($"{name}は{prices[name]}円です");
}
else
{
Console.WriteLine("未登録の商品です");
}
}
}
練習問題
- 「じゃがいも:180円」を追加してください。
- foreachですべての商品と価格を表示してください。
- 「だいこん」を削除してください。
- 最後の検索部分をTryGetValueで書き換えてください。
解答例を見る
次は、4つの問題を順番に反映した解答例です。まず自分で書いてから開いて確認してみましょう。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var prices = new Dictionary<string, int>();
prices.Add("にんじん", 100);
prices.Add("だいこん", 200);
prices.Add("たまねぎ", 150);
// 1. じゃがいもを追加
prices.Add("じゃがいも", 180);
// 2. すべての商品と価格を表示
foreach (var pair in prices)
{
Console.WriteLine($"{pair.Key}:{pair.Value}円");
}
// 3. だいこんを削除
prices.Remove("だいこん");
Console.Write("商品名を入力してください:");
string? name = Console.ReadLine();
// 4. TryGetValueで確認と取り出しを同時に行う
if (name != null && prices.TryGetValue(name, out int price))
{
Console.WriteLine($"{name}は{price}円です");
}
else
{
Console.WriteLine("未登録の商品です");
}
}
}
- 問題1:
Addで「じゃがいも」を追加しています。 - 問題2:
foreachでキーと値をすべて表示しています。 - 問題3:
Removeで「だいこん」を削除しています。 - 問題4:
TryGetValueで、キーの確認と価格の取り出しを同時に行っています。
必要になったら学ぶ発展内容
最初の授業では、ここまで理解できれば十分です。次の書き方は、必要になったときに学びましょう。
TryAdd:同じキーがあるとき、例外にせず追加の成否を確認するStringComparer.OrdinalIgnoreCase:英字の大文字・小文字を区別せずにキーを扱う- 三項演算子:短く書けるが、まずはif文で処理の流れを理解する
初期化の2種類の書き方については、Dictionary の初期化方法({} と [] の違い)に分けて解説しています。
次に読む記事
- ListとDictionaryでは検索速度に違いがある?:検索方法の違いを詳しく確認する
- Dictionary の初期化方法({} と [] の違い):初期値をまとめて書く方法を学ぶ
- WindowsFormsアプリで画面から入力した値でDictionary型のデータを作成する:画面入力からDictionaryへ登録する
- WinForms実践:Dictionaryで作る電話帳アプリ:ファイル読み込みと検索をアプリで実践する
- C#データ処理 基礎シリーズ:List、Dictionary、クラスを学ぶ順番で確認する
まとめ
- Dictionaryはキーと値をセットで管理する
- Addで追加し、角かっこで値を取り出す
- foreachですべてのデータを確認できる
- ContainsKeyでキーの有無を確認し、Removeで削除する
- 基本に慣れたらTryGetValueを使う
最初は一つずつ書いて動きを確認することが大切です。「商品名 → 価格」のような対応関係が必要になったら、Dictionaryを思い出してください。










ディスカッション
コメント一覧
まだ、コメントがありません