【C#】Dictionaryの使い方

C#のDictionaryの使い方をまとめます。

【検証環境】.NET Framework 4.7.2

使い方

初期化

初期化の書き方は下記の2種類あります。
2個目のほうが分かりやすいと思います。

//⓵
var dic = new Dictionary<string, int>()
{
    {"うまいぼう", 10 },
    {"ハイチュウ", 100 },
    {"ガブリチュウ", 30 },
};

//⓶
dic = new Dictionary<string, int>()
{
    ["うまいぼう"] = 10,
    ["ガブリチュウ"] = 30,
    ["ハイチュウ"] = 100,
};

ToDictionaryメソッドを使うことで、配列やリストからDictionaryを生成することができます。
使い方はこちらに記載しています。

要素を追加

要素の追加の書き方も下記の2種類あります。 
①Addで追加する場合は、追加したキーがすでに存在すると例外エラーが発生します。
②こちらの場合は、追加したキーがすでに存在するとValueを書き換えます。

//⓵
dic.Add("ぷっちょ", 100);   

//⓶
dic["ぷっちょ"] = 120; 

値を取得

Dictionaryからvalueを取り出す場合は、下記のようにキーを指定して取得します。

var value = dic["ぷっちょ"];

ただし、指定したキーが存在しない場合は例外エラーが発生します。
キーが存在しないことを考慮する必要がある場合は、下記のようにContainsKeyメソッドを使いキーの存在を確認するようにしましょう。

bool containsKey = dic.ContainsKey("ぷっちょ");

//※Anyでもいけるが、ContainsKeyのほうが早い
bool any = dic.Any(d => d.Key == "ぷっちょ");

要素を削除

Dictionaryから特定の要素を削除する場合は、Removeメソッドを使用します。
すべての要素を削除する場合は、Clearメソッドを使用します。

//キーを指定して削除
var remove = dic.Remove("ぷっちょ");

//すべての要素を削除
dic.Clear();

一つのキーに複数の値を持たせる

Dictionaryはキーを重複させるとエラーになりますが、同じキーに対して複数の値を持たせることは可能です。
ValueをList<string>などのようにコレクションにすることで実現可能です。

var dic1 = new Dictionary<string, string>()
{
    //キーが重複してエラーになる
    ["Key1"] = "value1",
    ["Key1"] = "value2",
    ["Key2"] = "value3",
    ["Key2"] = "value4",
};

var dic2 = new Dictionary<string, List<string>>()
{
    //Valueをリストにすることで単一のキーに複数の値をもたせることができる。
    ["Key1"] = new List<string>() { "value1", "value2", },
    ["Key2"] = new List<string>() { "value3", "value4", },
};

ToLookupメソッドを使う選択肢もあります。
使い方はこちらに記載しています。

その他の使い方

foreachでループ

foreach (var item in dic)
{
    Console.WriteLine($"{item.Key}:{item.Value}円");
}

LINQを使う

var sum = dic.Sum(d => d.Value);

Keysプロパティ / Valuesプロパティ

Keys / Values プロパティからDictionary内のそれぞれのコレクションを取得できます。
下記のように使うことができます。

//Keys
foreach (var key in dic.Keys)
{
    Console.WriteLine(key); 
}

//Values
var sum = dic.Values.Sum()

Leave a Reply

Your email address will not be published. Required fields are marked *