我有一个这样的 POCO:
class Poco{
int first;
int last;
int category;
}
和一份清单
List<Poco> pocoList;
我需要从列表中删除与指定类别的项目重叠的项目,重叠定义为:
if (a.category!=category && (a.first >= b.first && a.first <= b.last) || (a.last >= b.first && a.last <= b.last)){
// delete item a
}
两个重叠的项目永远不会有相同的类别。最后总是大于第一个。第一个和最后一个定义一个范围。可能存在不止一个重叠。
对列表进行排序,使得 List[n].start < List[n+1].start 始终为真。
例如,给定类别 10,我需要删除所有不属于类别 10 的项目,并且该项目范围的任何部分与类别 10 的项目范围重叠。
我当前的实现是粗略的,在分析我的应用程序时,我可以看到使用它的处理分支的整个时间的 65% 以上都花在了这个循环中,这不足为奇。
for (int i=object.pojoList.Count-1;i>=0;i--){
for (int j=object.pocoList.Count-1;j>=0;j--){
if (pocoList[i].overlaps(pocoList[j],category){
pocoList.RemoveAt(j);
}
}
}
我觉得必须有一种方法可以使用比较器或 LINQ 删除项目,但我无法弄清楚。
有什么建议么?谢谢你。