(我已经做了尽可能多的搜索基于"removeall where"或"removeall two argument predicate"的关键字,没有太多运气,所以这里去了)
问题是我有一个对象列表(类Wave)和一个关系函数如下: private bool AinB(Wave A,Wave B),如果A'在'B中,则返回true.另外AinB(x,y)为真保证AinB(y,x)是假的.
删除列表中对象'在列表中的另一个对象中的所有对象的最佳方法是什么?也就是说,在删除之后,列表应该只包含与列表中的任何其他对象"处于"关系中的对象?
理想情况下,这可以很容易地完成
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;
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我想知道是否有更好的方法使用直接linq代码来解决问题.谢谢.