用两个泛型列表生成交集和分解列表
本文关键字:列表 分解 泛型 两个 | 更新日期: 2023-09-27 18:03:10
假设我们有两个List<int>
List<int> list1 = new List<int> { 1, 3, 5, 7 , 9, 11, 18 };
List<int> list2 = new List<int> { 2, 3, 5, 7 , 9, 10, 20, 26, 36 };
疑问how can I produce;
intersect {3, 5, 7, 9 }
list1Decomp { 1, 11, 18 }
list2Decomp { 2, 10, 20, 26, 36 }
var intersection = list1.Intersect(list2).ToList();
var list1Decomp = list1.Except(intersection).ToList();
var list2Decomp = list2.Except(intersection).ToList();
var intersect = list1.Intersect(list2);
var list1Decomp = list1.Except(list2);
var list2Decomp = list2.Except(list1);
总之:
intersect = list1.Intersect(list2);
list1Decomp = list1.Except(list2);
list2Decomp = list2.Except(list1);
这些算法对于有序集合(例如HashSet<>)是最有效的
还有注意在自定义类型集合上使用这些算法;它们确实需要良好的IEquatable<>支持(即实现接口并提供自己的GetHashCode和Equals)。否则,结果将是而不是您期望的
虽然你没有问,但你可能有:
symmDifference = list1.Union(list2).Except(list1.Intersect(list2))
或
symmDifference = new HashSet<int>(list1).SymmetricExceptWith(list2)