C#でDictionaryから同時に複数の条件を削除したい時にDictionaryに、そういった機能が無いため拡張メソッドを作成しました。
Dictionaryの宣言
以下のように Dictionary を宣言していたとします。
var table = new Dictionary<string, string>() { { "1", "1" }, { "2", "2" }, { "3", "3" }, { "4", "4" }, };
一括で削除するために拡張メソッドを宣言
Dictionaryの拡張メソッドとして以下を宣言します。
public static class DictionaryExtension { public static void Remove<TKey, TValue>(this Dictionary<TKey, TValue> source, Func<TKey, bool> cond) { IEnumerable<TKey> keys = source.Keys.Where(cond).ToArray(); foreach (var item in keys) { source.Remove(item); } } }
TKey と TValue は Dictionary のクラスに宣言されているのでそのまま使用します。
使い方
使い方は以下の通りです。普通にRemoveメソッドの2番目としてIDEに表示されて、System.Linq のほかの拡張メソッドのように使用できます。
table.Remove(key => key == "1" || key == "2");