ant*_*liu 1 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)
}
Run Code Online (Sandbox Code Playgroud)
您的原始代码实际上不起作用,因为您修改了您枚举的List.
你可以这样做:
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);
Run Code Online (Sandbox Code Playgroud)
如果你修改
List<string> stringList
Run Code Online (Sandbox Code Playgroud)
成为
HashSet<string> stringList
Run Code Online (Sandbox Code Playgroud)
性能将得到改善,特别是如果字符串数量很大,因为列表成员资格的测试是O(n),而测试哈希集成员资格接近O(1).
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |