C# Dictionaryの使い方のサンプル

C#のDictionaryの使い方のサンプルです。

確認環境
・Microsoft Visual Studio Community 2017

目次

仕組み Dictionaryクラス
初期値 要素に初期値をセットする
取得する キーを指定して値を取得する
  キーと値をすべて取得する(foreach文)
  キーの集合を取得する (Keysプロパティ)
  値の集合を取得する(Valuesプロパティ)
  指定のキーがあるか真偽値を返す(ContainsKeyメソッド)
  指定の値があるか真偽値を返す(ContainsValueメソッド)
  要素数を取得する (Countプロパティ)
追加する キーと値を追加する(Addメソッド/添字)
更新する キーを指定して値を更新する(添字)
削除する 要素の位置を指定して要素を削除する (Removeメソッド)
  すべての要素を削除する (Clearメソッド)

Dictionaryクラス

var a = new Dictionary<string,string>();

上記はDictionaryクラスをインスタンス化して変数aに代入しています。
この変数aは複数のキーと値を持てるようになります。
<>はジェネリクスです。
varキーワードを使用していて型推論が行われます。
変数aの各キーと各値のデータ型はstringとstringです。

Dictionaryの変数の図

  • 「キー」と「値」の組み合わせを要素として持ちます。
  • 「キー」は一意です。
  • キーは任意の文字列を使うことができます。
  • サイズをあとから動的に変更できます。
  • Java等の他言語でのマップ(Map)にあたります。
  • 以下はMicrosoftのC#のDictionaryクラスのリンクです。
    https://msdn.microsoft.com/ja-jp/library/xfhwa508(v=vs.110).aspx

要素に初期値をセットする

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>()
        { {"a","赤"},
          {"b","黄"},
          {"c","青"}
        };

        foreach (var a in colors)
        {
            Console.WriteLine(a.Key);// a b c
            Console.WriteLine(a.Value);// 赤 黄 青
        }
    }
}

8~12行目は、Dictionaryクラスをインスタンス化し、かつ初期値をセットしています。代入する変数はvarで宣言できます。
14~18行目は、foreach文で値を取得しています。

キーを指定して値を取得する

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string,string>();

        colors.Add("a","赤");
        colors.Add("b","黄");
        colors.Add("c","青");

        Console.WriteLine(colors["b"]);// 黄
    }
}

14行目は、添字でキーを指定して値を取得しています。

キーと値をすべて取得する(foreach文)

using System;
using System.Collections.Generic;

class Test1
{
	static void Main()
	{
		var color1 = new Dictionary<string, string>();
		color1.Add("A", "赤");
		color1.Add("B", "黄");
		color1.Add("C", "青");

		//foreach (KeyValuePair<string,string> a in color1)
		foreach (var a in color1)
		{
			Console.WriteLine(a.Key);    // A B Cと出力される
			Console.WriteLine(a.Value);  // 赤 黄 青と出力される
		}
	}
}

14行目は、foreach文でキーと値を取得しています。変数の前はvarで可能です。
13行目のようにデータ型でも可能です。

キーの集合を取得する (keysプロパティ)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string,string>();

        colors.Add("a","赤");
        colors.Add("b","黄");
        colors.Add("c","青");

        foreach (var a in colors.Keys)
        {
            Console.WriteLine(a);// a b c
        }
    }
}

14行目は、keysプロパティでキーの集合を取得しています。

値の集合を取得する(Valuesプロパティ)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string,string>();

        colors.Add("a","赤");
        colors.Add("b","黄");
        colors.Add("c","青");

        foreach (var a in colors.Values)
        {
            Console.WriteLine(a);// 赤 黄 青
        }
    }
}

14行目は、valuesプロパティで値の集合を取得しています。

指定のキーがあるか真偽値を返す(ContainsKeyメソッド)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>();
        colors.Add("a", "赤");
        colors.Add("b", "黄");
        colors.Add("c", "青");

       if (colors.ContainsKey("b"))
        {
            Console.WriteLine("存在します");// 存在しますと出力される
        }
    }
}

13行目は、ContainsKeyメソッドで指定のキーがあるかを取得しています。
ある場合trueです。

指定の値があるか真偽値を返す(ContainsValueメソッド)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>();
        colors.Add("a", "赤");
        colors.Add("b", "黄");
        colors.Add("c", "青");

        if (colors.ContainsValue("青"))
        {
            Console.WriteLine("存在します");// 存在しますと出力される
        }
    }
}

13行目は、ContainsValueメソッドで指定の値があるかを取得しています。
ある場合trueです。

要素数を取得する (Countプロパティ)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>();

        colors.Add("a", "赤");
        colors.Add("b", "黄");
        colors.Add("c", "青");

        Console.WriteLine(colors.Count);// 3
    }
}

14行目は、Countプロパティで要素数を取得しています。

キーと値を追加する (Addメソッド/添字)

using System;
using System.Collections.Generic;

class Test1
{
	static void Main()
	{
		//Dictionary<string,string> colors = new Dictionary<string,string>();
		var colors = new Dictionary<string, string>();

		colors.Add("a", "赤");
		colors.Add("b", "黄");
		colors.Add("c", "青");
		colors["d"] = "白";

		foreach (var a in colors)
		{
			Console.WriteLine(a.Key);// a b c d
			Console.WriteLine(a.Value);// 赤 黄 青 白
		}
	}
}

11~13行目は、Addメソッドでキーと値を追加しています。Addメソッドで既にあるキーを指定した場合エラーになります。
14行目のように添字で存在しないキーを指定しても追加になります。

キーを指定して値を更新する(添字)

using System;
using System.Collections.Generic;

class Test1
{
	static void Main()
	{
		var colors = new Dictionary<string, string>();
		colors.Add("a", "赤");
		colors.Add("b", "黄");
		colors.Add("c", "青");

		colors["b"] = "オレンジ";
		Console.WriteLine(colors["b"]);// オレンジ

		colors["z"] = "白";
		foreach (var a in colors)
		{
			Console.WriteLine(a.Key);// a b c z
			Console.WriteLine(a.Value);// 赤 オレンジ 青 白
		}
	}
}

13行目は、添字で存在するキーを指定して値を更新しています。
16行目のように添字で存在しないキーを指定すると追加になるので注意が必要です。

要素を削除する (Removeメソッド)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>();

        colors.Add("a", "赤");
        colors.Add("b", "黄");
        colors.Add("c", "青");

        colors.Remove("b");

        foreach (var a in colors)
        {
            Console.WriteLine(a.Key);// a c
            Console.WriteLine(a.Value);// 赤 青
        }
    }
}

14行目は、Removeメソッドでキーを指定して削除しています。

すべての要素を削除する (Clearメソッド)

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        var colors = new Dictionary<string, string>();

        colors.Add("a", "赤");
        colors.Add("b", "黄");
        colors.Add("c", "青");

        colors.Clear();

        Console.WriteLine(colors.Count);// 0
    }
}

14行目は、Clearメソッドですべての要素を削除しています。

関連の記事

C# Listの使い方のサンプル

△上に戻る