C#のDictionaryの使い方のサンプルです。(確認環境:Microsoft Visual Studio Community 2017)
目次
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メソッドですべての要素を削除しています。
関連の記事