c# - 根据另一个集合过滤一个集合

标签 c# asp.net algorithm

我有一个 List<businessobject>对象集合和 List<string>对象集合。我想过滤我的 List<businessobject>因此,如果业务对象中的某个属性等于 List<string>它将被过滤掉。我可以想到用这种方式编写代码,但是有没有更快或更好的方法?

List<businessobject> bo = loadBusinessObjectList();
List<string> stringList = loadStringList();
foreach(businessobject busobj in bo){
   if(stringList.contains(busobj.myProperty))
      bo.remove(busobj)
}

最佳答案

您的原始代码实际上将不起作用,因为您修改了您正在枚举的列表。

你可以这样做:

List<businessobject> bo = loadBusinessObjectList();
List<string> stringList = loadStringList();

var matches = (from b in bo where stringList.Contains(b.SomeProperty) select b);
var bo = bo.Intersect(matches);

如果你修改

List<string> stringList

成为

HashSet<string> stringList

性能会得到改善,尤其是在字符串数量很大的情况下,因为列表成员资格的测试是 O(n),而哈希集成员资格的测试方法是 O(1)。

关于c# - 根据另一个集合过滤一个集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833774/

相关文章:

c# - 报告查看器 - 在同一页上换行表

c# - 为什么我的 C# 程序在从 Windows 7 命令行运行时经常暂停?

Asp.net 表单例份验证 cookie 不支持 IIS7 超时

c# - 加载和使用字典项目的最佳实践?

python - 拆分书架的可能性

javascript - 查找日期范围内的可用天数

c# - 在单元测试中使用伪造接口(interface)中未定义的方法

c# - 使用 stringbuilder 的好处

asp.net - 跟踪并列出 ASP SessionStateProvider 中用户的所有 session

c++ - 最短路径算法太慢