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()