没有另一个列表元素的 C# 列表(集合论,补码)[重复]

Posted

技术标签:

【中文标题】没有另一个列表元素的 C# 列表(集合论,补码)[重复]【英文标题】:C# List without Elements of another List (set theory, complement) [duplicate] 【发布时间】:2020-01-19 01:43:09 【问题描述】:

我有两个List<Image>ListAListB),我需要一种有效的方法来获取ListA 的元素,而不需要ListB 的元素(A\B)

例如:

ListA 包含 Image1Image2Image3Image4 ListB 包含 Image2Image4 ListA \ ListB 将是 Image1, Image3

我对 C# 比较陌生,欢迎提出一些建议

【问题讨论】:

var result = ListA.Except(ListB).ToList(); 你可能错过了之前的搜索,这个问题是likely duplicated 【参考方案1】:

如果ListA 的项目是唯一的,你可以提出一个简单的Linq 查询:

  using System.Linq;

  ...

  List<Image> result = ListA
    .Except(ListB)
    .ToList();

如果要修改现有列表(即ListA):

  ListA.RemoveAll(image => ListB.Contains(image));

【讨论】:

感谢您的帮助!我意识到我必须为我的自定义 Image 类实现 IEquatable 接口 @flexwend:嗯,是的,如果你必须比较不同的实例,它们可以彼此相等(即如果Image1 可以等于Image2) ;如果图像相等,当且仅当它们共享相同的 reference 时,您不必实现任何 IEquatable&lt;T&gt;

以上是关于没有另一个列表元素的 C# 列表(集合论,补码)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

从一个列表中删除元素如果不包含在另一个列表中。 C# [重复]

C# 集合怎么赋值给另一个集合

C# 从 List<T> 中选择存在于另一个列表中的所有元素

在c#中使用lambda获取嵌套列表中的特定元素

C#泛型集合之——列表

检查一个列表元素中的元素是不是存在于另一个列表中