Dictionary
型は、キー(TKey
)と値(TValue
)をセットで管理できる、C#の代表的なコレクションの一つです。高速な検索性能を持ち、使い方をマスターすれば、日常的な開発で非常に役立つ道具になります。
本記事では、Dictionary
の基本的な使い方をわかりやすく解説します。C#に慣れてきた方が次のステップに進むための参考になれば幸いです。
Dictionaryの基本構文と初期化方法
Dictionary<TKey, TValue>
は、C#でキーと値のペアを扱うための汎用的なコレクションです。ここでは、基本的な宣言方法と初期化方法について解説します。
Dictionaryの宣言
Dictionary
を使うには、まずキーと値の型を指定してインスタンスを作成します。
var dict = new Dictionary<string, int>();
上記の例では、キーが string
型、値が int
型の Dictionary
を作成しています。つまり、「文字列(例:商品名)から整数(例:在庫数)を参照する」といった用途に使えます。
もちろん、string
と int
以外の型も自由に使うことができます。
var userDict = new Dictionary<int, string>();
このようにすれば、「ユーザーID(整数)」と「ユーザー名(文字列)」の対応を管理できます。
初期値を設定して初期化する
Dictionary
は、定義と同時に初期データを設定することも可能です。以下のように初期値を追加した状態でインスタンスを作成できます。
var fruitDict = new Dictionary<string, int>
{
{ "apple", 3 },
{ "banana", 5 },
{ "orange", 2 }
};
この例では、果物名をキー、在庫数を値として管理しています。中括弧 {}
の中で Add()
と同じ構文を使うことで、初期データを設定しています。
型推論(var)についての補足
C# では、右辺から型が明確に分かる場合は var
を使って型を省略できます。ただし、読みやすさの観点から、場面によっては明示的に型を書くことも推奨されます。
Dictionary<string, int> scores = new Dictionary<string, int>();
このセクションでは Dictionary
の基本的な宣言と初期化について紹介しました。次のセクションでは、実際の操作(追加、取得、更新、削除)を詳しく見ていきましょう。
要素の追加・取得・更新・削除
Dictionary
は、キーを指定して値を追加・取得・更新・削除することができます。このセクションでは、それぞれの操作について具体的なコード例とともに解説します。
要素の追加
Add() メソッドを使う
新しいキーと値のペアを追加するには、Add()
メソッドを使います。
var dict = new Dictionary<string, int>();
dict.Add("apple", 3);
dict.Add("banana", 5);
同じキーを2回以上追加しようとすると、ArgumentException
が発生します。
dict.Add("apple", 10); // 例外が発生("apple" はすでに存在)
インデクサ([])を使う
インデクサを使って新しいキーに値を代入することで追加も可能です。
dict["orange"] = 2; // 存在しないキーなら追加される
インデクサは、すでに存在するキーに使った場合は「更新」になります。
要素の取得
インデクサ([])で取得
値を取得するには、キーを指定してインデクサを使います。
int count = dict["apple"];
Console.WriteLine(count); // 3
ただし、指定したキーが存在しない場合は KeyNotFoundException
が発生します。
int count = dict["grape"]; // 存在しないキー → 例外発生
TryGetValue() を使った安全な取得
安全に値を取得したい場合は TryGetValue()
を使いましょう。
if (dict.TryGetValue("grape", out int count))
{
Console.WriteLine($"在庫数: {count}");
}
else
{
Console.WriteLine("その果物は登録されていません。");
}
要素の更新
すでに存在するキーに対して新しい値を設定すると、値が上書きされます。
dict["banana"] = 10; // 値を更新
インデクサを使えば Add()
と違って例外は発生しません。
要素の削除
キーを指定して要素を削除するには Remove()
メソッドを使います。
dict.Remove("apple");
削除できたかどうかを確認したい場合は、戻り値をチェックします。
if (dict.Remove("apple"))
{
Console.WriteLine("削除に成功しました。");
}
else
{
Console.WriteLine("指定したキーは存在しません。");
}
次のセクションでは、Dictionary
に備わっている便利なメソッドやプロパティについて紹介します。
各種メソッドとプロパティの紹介
Dictionary<TKey, TValue>
には、キーの存在確認や要素数の取得など、開発に役立つさまざまなメソッド・プロパティが用意されています。このセクションでは、代表的なものをピックアップして紹介します。
ContainsKey() :指定したキーが存在するかを確認
if (dict.ContainsKey("banana"))
{
Console.WriteLine("バナナは在庫リストに登録されています。");
}
キーが存在するかを調べる際にはこのメソッドが便利です。インデクサで無理にアクセスするより安全です。
ContainsValue() :指定した値が存在するかを確認
if (dict.ContainsValue(5))
{
Console.WriteLine("在庫数が5の果物が存在します。");
}
あまり頻繁には使われませんが、値の重複チェックなどに利用できます。
Keys プロパティ:すべてのキーを取得
foreach (var key in dict.Keys)
{
Console.WriteLine($"キー: {key}");
}
辞書に登録されている全てのキーを列挙できます。Keys
は ICollection<TKey>
型です。
Values プロパティ:すべての値を取得
foreach (var value in dict.Values)
{
Console.WriteLine($"値: {value}");
}
Values
も ICollection<TValue>
型として全ての値を取り出せます。
Count プロパティ:要素数を取得
Console.WriteLine($"登録されている項目数: {dict.Count}");
現在登録されているキーと値のペアの総数を返します。
Clear() メソッド:すべての要素を削除
dict.Clear();
すべてのキーと値を一括削除する場合に使用します。
まとめ
この記事では、C# の Dictionary<TKey, TValue>
型について、基本的な使い方を開設しました。
Dictionary
は、キーを使って高速にデータへアクセスできる便利なコレクションです。特に「一意なキーで値を管理したい」「検索速度を重視したい」といった場面で威力を発揮します。
最後までお読みいただきありがとうございました。この記事が、あなたのC#開発に少しでも役立てば幸いです。
コメント