C# 从字典中删除元素
是否存在任何简单的解决方案,允许我使用LINQ解决下一个问题 e、 g.我有字典路径强> 其中包含以下元素C# 从字典中删除元素,c#,linq,C#,Linq,是否存在任何简单的解决方案,允许我使用LINQ解决下一个问题 e、 g.我有字典路径 其中包含以下元素 <"/abc/12", 13> <"/test/abc", 22> <"/stack/overflow/com", 43> <"/stack/exception", 4> "/abc" "/stack/overflow" 我需要从路径字典中删除这些元素,这些元素的键不是从过滤器列表中提供的任何字符串开
<"/abc/12", 13>
<"/test/abc", 22>
<"/stack/overflow/com", 43>
<"/stack/exception", 4>
"/abc"
"/stack/overflow"
我需要从路径字典中删除这些元素,这些元素的键不是从过滤器列表中提供的任何字符串开始的。所以我应该得到以下结果:
<"/abc/12", 13>
<"/stack/overflow/com", 43>
您可以使用Linq:
var toDelete = paths
.Where(kv => !filter.Any(f => kv.Key.StartsWith(f)));
foreach(var delete in toDelete.Reverse())
paths.Remove(delete.Key);
用于非linq方式
创建要删除的新列表
foreach通过路径。键
在该循环中,通过过滤器进行过滤
if key.contains(filter)--可能希望将toupper()或tolower()添加到这两个函数中
然后将密钥添加到删除 然后再往前走
调用路径。删除(toRemoveStr) 答案很可能是肯定的,但如果您展示您已有的“不那么简单”解决方案,我会更好。您需要在第一条语句中使用
ToList()
或类似的内容。别忘了LINQ是延迟的,因此,当您从路径中删除时,foreach将抛出一个异常,因为枚举数将变得混乱。toDeletes.Reverse()
解决了修改集合的问题。@TimSchmelter这正是我要搜索的。Thanks@SPFiredrake:但是,值得注意的是,如果字典
很大,并且您只想删除一些键值对,那么使用删除
可能更有效。