如果是这样,它是什么?
编辑:回应以下评论:
var tabulatedOutputErrors = from error in outputErrors
group error by error into errorGroup
select new { error = errorGroup.Key, number = errorGroup.Count() };
var tabulatedInputErrors = from error in inputErrors
group error by error into errorGroup
select new { error = errorGroup.Key, number = errorGroup.Count() };
var problems = tabulatedOutputErrors.Except(tabulatedInputErrors);
如果需要,您可以扩展计数。
答案 0 :(得分:8)
LINQ具有Enumerable.Except
扩展方法,这似乎是您正在寻找的。 p>
示例:
var list1 = new int[] {1, 3, 5, 7, 9};
var list2 = new int[] {1, 1, 5, 5, 5, 9};
var result = list1.Except(list2); // result = {3, 7}
从.NET 3.5开始,在.NET 4.0中也存在HashSet<T>
类(以及类似的SortedSet<T>
类。这个类(或者更确切地说是.NET 4.0中的ISet<T>
接口)有一个ExceptWith
方法也可以完成这项工作。
示例:
var set1 = new HashSet<int>() {1, 3, 5, 7, 9};
var set2 = new HashSet<int>() {1, 1, 5, 5, 5, 9};
set1.ExceptWith(set2); // set1 = {3, 7}
当然,这取决于上下文/用法是否更适合这种方法。在大多数情况下,效率优势(就地执行差异操作和使用哈希码)可能是微不足道的。无论哪种方式,请选择。 :)