如何从List
问题的出现原因是需要从一个对象列表中移除那些至少在其他对象的某个变量中存在一次的对象。解决这个问题的方法是通过两个阶段的过程:
1. 构建一个必须被移除的Id的集合。
2. 从列表中移除那些在黑名单中存在的Id的项目。
这将需要对列表进行两次遍历。由于向HashSet中添加元素/测试是否包含元素的操作应该是一个常数时间的操作,整个操作应该在线性时间内运行。
代码如下:
var idsToBeRemoved = new HashSet(list1.Select(item => item.otherID) .Where(otherId => otherId.HasValue)); list1.RemoveAll(item => idsToBeRemoved.Contains(item.ID));
这段代码中,首先使用`Select`方法获取列表中每个对象的`otherID`变量,并使用`Where`方法筛选出那些`otherID`有值的对象。然后将这些`otherID`的值构建成一个`HashSet`对象`idsToBeRemoved`。最后使用`RemoveAll`方法从列表中移除那些`ID`在`idsToBeRemoved`中存在的对象。
在的问题中还提到了关于`Id`的类型的讨论,但没有给出明确的类型。在这里,我将`Id`的类型设为`int?`,即可为空的整数。
至于为什么不使用`new HashSet
总结起来,以上是解决问题的原因和方法。通过构建一个Id的黑名单,并从列表中移除那些在黑名单中存在的对象,即可实现从列表中移除那些至少在其他对象的某个变量中存在一次的对象。
问题的出现原因:
问题的出现是因为需要从一个List
解决方法:
要解决这个问题,可以使用以下代码来移除满足条件的对象:
list.RemoveAll(r => list.Any(o => o != r && r.variable == o.variable2));
这段代码使用了Lambda表达式和LINQ语句来实现从List中移除满足条件的对象。具体来说,它使用了RemoveAll方法来移除满足条件的对象。
其中,Lambda表达式r => list.Any(o => o != r && r.variable == o.variable2)用于判断对象r是否满足条件。在这个Lambda表达式中,list.Any(o => o != r && r.variable == o.variable2)用于判断在List中是否存在其他对象o,且o的variable2属性与r的variable属性相等。如果存在满足条件的对象o,则返回true,否则返回false。而RemoveAll方法则根据Lambda表达式的返回值来决定是否移除对象。
另外,还有一种解决方法是使用Ani提供的解决方案,它的时间复杂度是O(n),而使用上述代码的时间复杂度是O(n^2)。Ani的解决方案使用了两次循环遍历List来构建要移除的对象集合idsToBeRemoved,并最终将它们从List中移除。与此不同,使用上述代码的解决方案在每次循环中都需要遍历整个List来查找满足条件的对象,并将它们移除。
以上就是解决如何从List