Delete all the keys from the dictionary if the value matches for more than one key
我有一本字典
1 | private readonly Dictionary<string, WebResponse> _myDictionary; |
假设当前字典中有10个值。我可以在其中添加一些值,也可以根据字典中的键删除这些值,如下所示。
删除:
1 | _myDictionary.Remove(Key); |
号
其中键是字符串变量。
如果值与多个键匹配,是否可以一次删除多个键。我有kaar1、kaar2、kaar3、abcdef等键。现在我需要删除所有包含"kaar"的密钥。有可能吗?
请帮忙。
试试这个:
1 2 3 4 | _myDictionary .Where(x => x.Key.Contains("KAAR")) .ToList() .ForEach(kvp => _myDictionary.Remove(kvp.Key)); |
我扩展了@enigmactivity的答案,以提供两个通用版本作为扩展方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /// <summary> Removes all duplicate values after the first occurrence. </summary> public static void RemoveDuplicates<T, V> (this Dictionary<T, V> dict) { List<V> L = new List<V> (); int i = 0; while (i < dict.Count) { KeyValuePair<T, V> p = dict.ElementAt (i); if (!L.Contains (p.Value)) { L.Add (p.Value); i++; } else { dict.Remove (p.Key); } } } |
使用值字典(忽略键):0、1、2、3、5、1、2、4、5。结果:0,1,2,3,5,4。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | /// <summary> Removes all values which have any duplicates. </summary> public static void RemoveAllDuplicates<T, V> (this Dictionary<T, V> dict) { List<V> L = new List<V> (); int i = 0; while (i < dict.Count) { KeyValuePair<T, V> p = dict.ElementAt (i); if (!L.Contains (p.Value)) { L.Add (p.Value); i++; } else { dict.Where (j => Equals (j.Value, p.Value)).ToList ().ForEach (j => dict.Remove (j.Key)); } } } |
。
使用值字典(忽略键):0、1、2、3、5、1、2、4、5。结果:3,4。
对方法进行了优化,以防止对.where操作执行多次(否则,每个副本都将有n次执行,其中第一次执行之后的所有操作都将过时)。代码已经过测试和工作。
下面是用户@enigmavity给出的答案!!作为单独答案添加,以标记为正确答案。
1 | _myDictionary.Where(x => x.Key.Contains("KAAR")).ToList().ForEach(kvp => _myDictionary.Remove(kvp.Key)); |
号