その他

[C#] Dictionaryクラスの使い方(具体例あり)

今回は、C#のDictionaryクラスの使い方についてご紹介します。

Dictionaryとは

C#のDictionary<TKey, TValue>クラスは、キーのペアを効率よく管理するためのジェネリックコレクションです。

内部的にはハッシュテーブルを用いているため、要素の追加・更新・検索などを高速に処理できる特徴があります。

キーの重複は許されず、同一のキーで再度データを追加すると例外が発生する点に注意が必要です。

また、スレッドセーフではないため、複数スレッドから同時にアクセスする場合はConcurrentDictionaryなどの別のコレクションの検討をおすすめします。

基本的な使い方

宣言と初期化

まず、System.Collections.Generic名前空間をインポートし、Dictionaryを生成します。

実行結果

85

上記のように初期化時に要素をまとめて設定することもできます。

キーと値の型を自由に指定できるため、様々なデータに応用が可能です。

要素の追加と更新

要素の追加にはAddメソッドかインデクサーを使用します。

実行結果

Charlie: 31
Diana: 28

Addを使う場合は重複キーに注意し、既存キーがあるかどうか確認したい場合はContainsKeyTryGetValueの利用を検討します。

要素の取得と存在確認

存在しないキーをインデクサーで参照すると例外が発生するため、ContainsKeyTryGetValueで安全にチェックできます。

実行結果

Aliceのスコア: 85
Bobのスコア: 92
Eveのスコアは登録されていません。

TryGetValueは、キーの存在チェックと値取得を同時に行えるため便利です。

要素の削除と全削除

Removeメソッドで特定のキーを削除し、Clearメソッドで全要素を削除できます。

実行結果

Aliceを削除した: True
Dictionaryの要素数: 0

キーが見つからない場合はfalseが返されるため、削除可否を判定できます。

実用的な具体例

ここでは、複数のキーと値を扱いながら走査(ループ)や追加・更新を同時に行う例を示します。

実行結果

在庫一覧:
Potion: 10個
Hi-Potion: 5個
Antidote: 2個

更新後の在庫一覧:
Potion: 15個
Hi-Potion: 5個
Antidote: 2個
Elixir: 1個

このように、Dictionaryを活用することで大量のデータをキーと値で素早く管理できます。

注意点

キーの一意性が要求されるため、同じキーでAddを呼び出すと例外が発生します。

また、nullキーは通常許可されないので注意が必要です。

スレッドセーフではないため、マルチスレッド環境での利用はロック機構の導入かConcurrentDictionaryの活用が推奨されます。

さらに、大量のデータを取り扱う場合は初期容量を指定すると再ハッシュの回数が減り、パフォーマンス向上に役立ちます。

まとめ

C#のDictionaryクラスは、キーと値を効率的に管理できる強力なコレクションです。

要素の追加・更新・削除・走査などの操作を簡単に行える点が大きなメリットです。

適切な使い方と注意点を押さえることで、より柔軟で安全なプログラムを実装できます。