0

是否存在任何简单的解决方案,可以让我使用 LINQ 解决下一个问题。

例如,我有Dictionary<string,int> 路径;

其中包含以下元素

   <"/abc/12", 13>

   <"/test/abc", 22>

   <"/stack/overflow/com", 43>

   <"/stack/exception", 4>

我有一个 List<string> 过滤器,其中包含以下元素

   "/abc"
   "/stack/overflow"

而且我需要从路径字典中删除那些元素,这些元素不是从过滤器列表中提供的任何字符串开始的。所以我应该得到以下结果:

   <"/abc/12", 13>

   <"/stack/overflow/com", 43>
4

2 回答 2

2

您可以使用 Linq:

var toDelete = paths
    .Where(kv => !filter.Any(f => kv.Key.StartsWith(f)));
foreach(var delete in toDelete.Reverse())
    paths.Remove(delete.Key);

演示

于 2012-12-13T19:48:11.403 回答
0

对于非 linq 方式

创建要删除的新列表

通过paths.keys foreach

在该循环中通过过滤器进行遍历

如果 key.contains(filter) ---- 可能想要同时添加 toupper() 或 tolower()
然后将 key 添加到 toRemove

然后 foreach 到 toRemove 调用 paths.remove(toRemoveStr);

于 2012-12-13T19:53:43.857 回答