(「removeall where」または「removeall two argument predicate」のキーワードに基づいて可能な限り多くの検索を行ったが、運が悪かったので、ここに行く)
問題は、(Class Wave の) オブジェクトのリストと関係関数を次のように持っていることです: private bool AinB(Wave A, Wave B)、A が B に「ある」場合に true を返します。また、AinB(x,y) は true です。 AinB(y,x) が false であることを保証します。
オブジェクトがリスト内の別のオブジェクトに「ある」リスト内のすべてのオブジェクトを削除する最良の方法は何ですか? つまり、削除後、リストには、リスト内の他のオブジェクトと「含まれる」関係にないオブジェクトのみを含める必要がありますか?
理想的には、これは次のように簡単に実行できます。
listX.RemoveAll( (x,y) => AinB(x,y)) ですが、もちろんこれは C# では合法ではありません。x と y のどちらを削除するかを簡単に指定する方法もありません。
インデックスを使用してリストをループすることを考えました
int i = listX.Count - 1;
while (i>=0)
{
int r = listX.RemoveAll(X => AinB(X, listX[i]));
i = i - r - 1;
}
これは機能しているようですが、問題を解決するためのストレートなlinqコードを使用するより良い方法があるかどうか疑問に思っています。ありがとう。