从通用列表中获取对称差异

15 .net c# generics

我有2个独立的名单,我需要比较两个并得到一切,但两个列表的交集.我该怎么做(C#)?

Meh*_*ari 37

如果你的意思是除了交集(对称差异)之外的所有东西,你可以尝试:

var set = new HashSet<Type>(list1);
set.SymmetricExceptWith(list2);
Run Code Online (Sandbox Code Playgroud)

  • 很棒 - 这看起来是对我这样做的最佳方式. (2认同)
  • 非常好!这比我的清洁得多. (2认同)

Ree*_*sey 17

你可以使用Except来获取两个列表的交集之外的所有内容.

var differences = listA.Except(listB).Union(listB.Except(listA));
Run Code Online (Sandbox Code Playgroud)

如果你想获得除工会之外的所有东西:

var allButUnion = new List<MyClass>();
Run Code Online (Sandbox Code Playgroud)

(联盟是两个列表中的所有东西 - 除了联合之外的所有东西都是空集...)


Jon*_*eet 7

你是我的一切,这只是在一个列表其他?怎么样:

var allButIntersection = a.Union(b).Except(a.Intersect(b));
Run Code Online (Sandbox Code Playgroud)

这可能有点效率低下,但它相当简单地表明了你的意思(假设我当然正确地解释了你).