C#

【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()
エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】安心保障と豊富な案件紹介 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい

【未経験向け】自宅で現役エンジニアから学べる TechAcademy

テックアカデミーは、現役エンジニアから学べるオンラインに特化したプログラミングスクールです。
講師は全員、通過率10%の選考に合格した現役エンジニア。
確かなスキルをもとに受講生をマンツーマンサポートします。


▼こんな方におすすめ
・自宅にいながらオンライン完結で勉強できる
・受講生に1人ずつ現役エンジニアのパーソナルメンターが専属でつく
・チャットで質問すればすぐに回答が返ってくる
・オリジナルサービスやオリジナルアプリなどの開発までサポート