代码之家  ›  专栏  ›  技术社区  ›  Billy ONeal IS4

是否存在C+等价于C++的STD::StIGH差异?

  •  2
  • Billy ONeal IS4  · 技术社区  · 14 年前

    编辑:针对以下评论:

    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);
    

    1 回复  |  直到 14 年前
        1
  •  9
  •   Noldorin    14 年前

    林克拥有 Enumerable.Except 扩展方法,这似乎是你要找的。

    例子:

    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开始,还存在 HashSet<T> 类(以及类似的 SortedSet<T> NET 4.0中的类。这个班级(或者更确切地说是 ISet<T> .NET 4.0中的接口具有 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}
    

    当然,这种方法是否更可取取决于上下文/用法。在大多数情况下,效率优势(就地执行差分操作并使用哈希代码)可能可以忽略不计。不管怎样,你自己选吧