gpt4 book ai didi

C# List removeall 在谓词中接受两个参数?

转载 作者:行者123 更新时间:2023-11-30 14:59:05 25 4
gpt4 key购买 nike

(我已经根据“removeall where”或“removeall two argument predicate”的关键字做了尽可能多的搜索,但运气不佳,所以这里开始)

问题是我有一个对象列表(Wave 类)和一个关系函数:private bool AinB(Wave A, Wave B),如果 A“在”B 中则返回真。此外,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;
}

这似乎可行,但我想知道是否有更好的方法直接使用 linq 代码来解决问题。谢谢。

最佳答案

不幸的是,我想不出至少 O(n^2) 的方法来做到这一点。但好消息是,从 LINQ 的角度来看,这并不难:

listX.RemoveAll(item => listX.Any(isin => AinB(item, isin)));

关于C# List removeall 在谓词中接受两个参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17343670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com