.NET TIPS

Dictionaryクラスを簡単に初期化するには?[C# 3.0]

デジタルアドバンテージ 岸本 真二郎
2008/03/13

 C# 2.0(.NET Framework 2.0に含まれるC#)以降では、ジェネリック・クラスの追加によりコレクションが非常に使いやすくなっている。その1つであるDictionaryジェネリック・クラス(System.Collections.Generic名前空間のDictionary<TKey, TValue>クラス)も利用頻度の高いクラスである。

 Dictionaryクラスは.NET Framework 1.xにあったHashTableクラスを進化させたもので、キーと値の組み合わせでデータを保持し、指定したキーからペアとなっている値を素早く取り出すことができる(参考:「TIPS:ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)」)。

 このDictionaryクラスの初期化については、例えばリファレンス・マニュアルでは、次のようなサンプル・コードが記載されている。

Dictionary<string, string> openWith
    = new Dictionary<string, string>();

// Add some elements to the dictionary. There are no
// duplicate keys, but some of the values are duplicates.
openWith.Add("txt", "notepad.exe");
openWith.Add("bmp", "paint.exe");
openWith.Add("dib", "paint.exe");
openWith.Add("rtf", "wordpad.exe");
Dictionaryオブジェクトの初期化コード例

 このように、基本的にはAddメソッドを呼び出して、キーと値のペアを追加していく必要がある。

 これがC# 3.0では、次のようにして初期値を設定できるようになっている。

using System.Collections.Generic;

class sample
{
  Dictionary<string, string> openWith
     = new Dictionary<string, string>()
  {
    {"txt", "notepad.exe"},
    {"bmp", "paint.exe"},
    {"dib", "paint.exe"},
    {"rtf", "wordpad.exe"}
  };
}
C# 3.0におけるDictionaryオブジェクトの初期化

 このような、コレクションに追加する要素を列挙する記述は「コレクション初期化子」(Collection Initializer)と呼ばれ、IEnumerableインターフェイス(System.Collections名前空間)を実装しているクラスに対して利用可能だ。実際にはコンパイラによりAddメソッドの呼び出しに置き換えられる(詳細については「C# 3.0の概要:26.4.2 コレクション初期化子」を参照)。

 ちなみにC# 3.0では、暗黙の型を表すvarキーワードを使って、さらに次のように記述することもできる。

using System.Collections.Generic;

class sample
{
  // これはコンパイル・エラー
  private var openWith3 = new Dictionary<string, string>()
  {
    {"txt", "notepad.exe"},
    {"bmp", "paint.exe"},
    {"dib", "paint.exe"},
    {"rtf", "wordpad.exe"}
  };

  public void method()
  {
    // 記述量が最も少ない書き方
    var openWith2 = new Dictionary<string, string>()
    {
      {"txt", "notepad.exe"},
      {"bmp", "paint.exe"},
      {"dib", "paint.exe"},
      {"rtf", "wordpad.exe"}
    };
  }
}
varキーワードを使ったDictionaryクラスの記述

 ただしvarキーワードが利用できるのはローカル変数宣言時のみである。End of Article

カテゴリ:C# 3.0 処理対象:言語構文
カテゴリ:クラス・ライブラリ 処理対象:コレクション
使用ライブラリ:Dictionaryクラス(System.Collections.Generic名前空間)
使用ライブラリ:IEnumerableインターフェイス(System.Collections名前空間)
関連TIPS:ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)

この記事と関連性の高い別の.NET TIPS
構文:コレクションのインスタンス化と同時に要素を追加するには?[C#/VB]
ハッシュテーブル(連想配列)を使うには?(Dictionaryクラス編)[2.0のみ、C#、VB]
要素を重複なく管理するには?(HashSetクラス編)
ハッシュテーブル(Dictionaryクラス)を値でソートするには?
1つのキー文字列に対して複数の文字列値を保持するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH