あるリストのアイテムを別のリストから除外する方法について、かなり具体的な質問があります。Except() などの一般的なアプローチは機能しません。その理由は次のとおりです。
- リスト内の重複に「偶数」インデックスがある場合 - THIS 要素と NEXT 要素を削除する必要があります。
- リスト内の重複に「奇数」のインデックスがある場合-この要素とその前の1つの要素を削除する必要があります**。
- リスト内に同じ重複が多数出現する可能性があります。つまり、1 つは「奇数」インデックス、もう 1 つは「偶数」インデックスである可能性があります。
自分で作成したので、解決策を求めているわけではありません。ただし、このメソッドを何度も実行した後、「ANTS パフォーマンス プロファイラー」は、メソッドが実行時間全体の 75% (40 秒中 30 秒) を経過したことを示しています。質問は次のとおりです。同じ操作を実行するためのより高速な方法はありますか? 現在のコードを最適化しようとしましたが、まだパフォーマンスが不足しています。ここにあります:
private void removedoubles(List<int> exclude, List<int> listcopy)
{
for (int j = 0; j < exclude.Count(); j++)
{
for (int i = 0; i < listcopy.Count(); i++)
{
if (listcopy[i] == exclude[j])
{
if (i % 2 == 0) // even
{
//listcopy.RemoveRange(i, i + 1);
listcopy.RemoveAt(i);
listcopy.RemoveAt(i);
i = i - 1;
}
else //odd
{
//listcopy.RemoveRange(i - 1, i);
listcopy.RemoveAt(i - 1);
listcopy.RemoveAt(i - 1);
i = i - 2;
}
}
}
}
}
どこ:
- 除外 - 重複のみを含むリスト。このリストには、最大 30 個の要素が含まれる場合があります。
- listcopy - 重複をチェックする必要があるリスト。「除外」との重複が見つかった場合 → 削除操作を行います。このリストには、最大 2000 個の要素が含まれる場合があります。
LINQ が役立つと思いますが、その構文がよくわかりません。