私はこのような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
}
重複する 2 つのアイテムが同じカテゴリになることはありません。最後は常に最初よりも大きくなります。最初と最後は範囲を定義します。複数の重複がある可能性があります。
リストは、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を使用してアイテムを削除する方法が必要だと思いますが、わかりません。
助言がありますか?ありがとうございました。