我有字典
private readonly Dictionary<string, WebResponse> _myDictionary;
让我们假设我当前在词典中有10个值。我可以在其中添加一些值,也可以根据类似于以下内容的字典中的键删除这些值。
删除:
_myDictionary.Remove(Key);
其中key是一个字符串变量。
如果值匹配多个键,则可以一次删除多个键。我有{KAAR1,KAAR2,KAAR3,ABCDEF}之类的键。现在,我需要删除所有包含“ KAAR”的键。那有可能吗?
请帮助。
答案 0 :(得分:8)
尝试一下:
_myDictionary
.Where(x => x.Key.Contains("KAAR"))
.ToList()
.ForEach(kvp => _myDictionary.Remove(kvp.Key));
答案 1 :(得分:0)
下面是用户@Enigmavitivity给出的答案! 作为单独答案添加,以标记为正确答案。
_myDictionary.Where(x => x.Key.Contains("KAAR")).ToList().ForEach(kvp => _myDictionary.Remove(kvp.Key));
答案 2 :(得分:0)
我扩展了@Enigmativity的答案,提供了两个通用版本作为扩展方法。
/// <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。
/// <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次,第一个之后的所有内容都已过时)。代码已经过测试并且可以正常工作。