(我已经根据“ removeall where”或“ removeall两个参数谓词”的关键词做了尽可能多的搜索,所以运气不好)
问题是我有一个对象列表(Class Wave)和一个关系函数,如下所示:
私有布尔AinB(波形A,波形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代码解决问题的更好方法。
谢谢。
最佳答案
不幸的是,我想不出至少O(n ^ 2)的任何方法。但是好消息是,从LINQ的角度来看,这并不难:
listX.RemoveAll(item => listX.Any(isin => AinB(item, isin)));