我有两个清单:
List<myObject> mainList;
和
List<myObject> blackList;
我正在尝试按条件和另一个条件创建一个新列表,这些元素不应该在黑名单中。 这是我的尝试:
List<myObject> newList = mainList.Where(x => x.Id == 5 && !blackList.Contains(x)).ToList();
这个newList
是在一个循环中生成的,在循环的第一轮中,blackList
为空并且它有效,在第二轮blackList
包含大约200k个元素。当上面的线路工作时,它不会移动,它会在那里停留几分钟。如何更有效地过滤,以便我不会获得blackList
中的元素?感谢。
答案 0 :(得分:3)
您面临的问题是List<T>
实施Contains
的方式 - 它会线性搜索,对于长列表而言,这是非常缓慢且低效的。
为了获得更好的性能,您可以为黑名单使用更好的结构 - 对于像HashSet<T>
var blackList = new HashSet<myObject>(theBlackList);