(我已经根据“removeall where”或“removeall two argument predicate”的关键字进行了尽可能多的搜索,但运气不佳,所以就这样吧)
问题是我有一个对象列表(属于 Wave 类)和一个关系函数: private bool AinB(Wave A, Wave B),如果 A '在'B 中,则返回 true。AinB(x,y) 也是 true保证 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;
}
这似乎可行,但我想知道是否有更好的方法使用直接 linq 代码来解决问题。谢谢。