使用循环从字典中删除值

时间:2013-05-06 12:12:12

标签: c# dictionary

我有procedure我希望根据某个条件从字典中删除值(将键值与另一个字典进行比较)

foreach loop我不允许修改字典。

是否有更好的方法可以做到这一点?

键值为string,

foreach (var archive in dictArchivedTitles)
{
       foreach (var kvp in dictAllTheFiles)
       {
           if (kvp.Key == archive.Key)
           {
               dictAllTheFiles.Remove(kvp.Key);
           }
       }
  }

4 个答案:

答案 0 :(得分:7)

您可以执行以下操作。

foreach (var archive in dictArchivedTitles)
{
    if(dictAllTheFiles.ContainsKey(archive.Key)
        dictAllTheFiles.Remove(archive.Key);
}

答案 1 :(得分:3)

更改

foreach (var kvp in dictAllTheFiles)

foreach (var kvp in dictAllTheFiles.ToList())

这样你就可以处理dictAllTheFiles

的副本

答案 2 :(得分:3)

如果在这些嵌套循环中删除已存档标题的密钥,那么这将更有效和可读(imho):

dictAllTheFiles = dictAllTheFiles.Keys.Except(dictArchivedTitles.Keys)
    .ToDictionary(key => key);

请注意,您需要添加using System.Linq;

答案 3 :(得分:2)

如果您不想修改任何字典并且可以访问LINQ,则可以执行以下操作:

var nonMatchingEntries = 
    dictAllTheFiles.Where(kv => !dictArchivedTitles.ContainsKey(kv.Key));