如何从List中删除所有对象,其中object.variable至少在任何其他object.variable2中存在一次?
11 浏览
0 Comments

如何从List中删除所有对象,其中object.variable至少在任何其他object.variable2中存在一次?

我在考虑如何编写这段代码时遇到了困难。

我有一个项目列表,每个项目都有一个ID。另外还有一个值,我们称之为otherID。如果otherID为零或空,我们将忽略它。然而,如果otherID包含列表中另一个项目的ID,我希望将该项目从列表中移除。

例子:

item1.ID = 5, item1.otherID = null
item2.ID = 6, item2.otherID = 5
item3.ID = 7, item3.otherID = null

所以item1应该从列表中移除,因为它的ID存在于item2的otherID字段中。

有人知道我应该如何编写这段代码吗?

0
0 Comments

问题的出现原因是需要从一个对象列表中移除那些至少在其他对象的某个变量中存在一次的对象。解决这个问题的方法是通过两个阶段的过程:

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(list1.Where(item => item.otherID.HasValue).Select(item => item.otherID.Value))`的方法,原作者给出的解释是`Id`的类型可能也是`int?`,为了避免繁琐的代码,选择了使用原始的方法。

总结起来,以上是解决问题的原因和方法。通过构建一个Id的黑名单,并从列表中移除那些在黑名单中存在的对象,即可实现从列表中移除那些至少在其他对象的某个变量中存在一次的对象。

0
0 Comments

问题的出现原因:

问题的出现是因为需要从一个List中移除那些至少在其他object的variable2中存在一次的所有对象。也就是说,我们需要根据object的某个属性值,在List中找到具有相同属性值的其他对象,并将它们从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中移除那些至少在其他object的variable2中存在一次的所有对象的问题的方法。可以根据具体的需求选择使用上述代码或Ani提供的解决方案来实现移除操作。

0