나는이 같은 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가 항상 true가되도록 목록이 정렬됩니다.
예를 들어 카테고리가 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를 사용하여 항목을 삭제하는 방법이 있어야한다고 생각하지만 해결할 수 없습니다.
제안 사항? 고맙습니다.
코드에 오타가 있습니까? 'a.first> = b.first || a.first <= b.last'는'b.first <= b.last' 인 경우 true가됩니다. 이는 실질적으로 항상 의미합니다. – Jon
또한 'i> = 0'과'j> = 0'이 아닌가? 또한 'overlaps' 관계가 대칭 적이기를 원하는가? ('a overlaps b는 반드시'b overlaps a '를 의미하지는 않습니다.) – Rawling
@Jon 예, 오타가 수정되었습니다. a의 일부가 b의 일부와 겹치는 경우 여야합니다. – Simon