我有procedure
我希望根据某个条件从字典中删除值(将键值与另一个字典进行比较)
在foreach loop
我不允许修改字典。
是否有更好的方法可以做到这一点?
键值为string,
foreach (var archive in dictArchivedTitles)
{
foreach (var kvp in dictAllTheFiles)
{
if (kvp.Key == archive.Key)
{
dictAllTheFiles.Remove(kvp.Key);
}
}
}
答案 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));