【发布时间】:2018-10-24 23:55:38
【问题描述】:
我有一个包含一些元素的列表,我想从另一个列表中删除元素。 如果一个项目的值Contains(不等于)另一个列表中的值,则应该删除它。
其中一种方法是这样做:
var MyList = new List<string> { ... }
var ToRemove = new List<string> { ... }
MyList.RemoveAll(_ => ToRemove.Any(_.Contains));
它有效...
但是,我有 LOT 个列表(>100 万),并且由于 ToRemove 可以排序,因此使用它来加快处理速度是有意义的。
创建一个循环很容易,但是有没有办法通过排序的集合来做到这一点?
更新:
在包含我们禁止列表的文本上进行 20k 次迭代时,我得到了这个:
禁止列表作为列表 -> 00:00:07.1993364
禁止列表作为 HashSet -> 00:00:07.9749997
多次运行后是一致的,所以hashset比较慢
【问题讨论】:
-
您有超过一百万个列表?还是列出项目?
-
@Rufus:我知道如何对列表进行排序,我想说的是,如果对包含要排除的单词的列表进行排序,该过程可能会快很多,但我正在尝试看看如何使用 c# 集合来做到这一点。
-
@Camilo:我有超过一百万个列表,每个列表大约有 7-10 个单词
-
OP,您当前的代码像 this 一样工作是否正确 - 您想从 MyList 中删除字符串项,其中该字符串部分包含来自 ToRemove 的值?
-
我们可能会有一些误报,但没关系,由于数量庞大,丢失部分数据是个问题
标签: c# .net collections