zoukankan      html  css  js  c++  java
  • 关于List<T>集合中的差集

    差集在几何数学中的定义:一般地,记A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A、B,我们把集合{x∣x∈A,且x∉B}叫做A与B的差集,记作A-B(或A\B),即A-B={x|x∈A且x∉ B}(或A\B={x|x∈A且x ∉B},同理 B-A={x∣x∈B且x∉A} 叫做B与A的差集

    通俗点讲就是A-B 是属于A的但不属于B的那部分集合;

    在.NET中 List<T>.Except()来实现集合的差集;

    如:

    List<string> A=new List(){"A","B","C"}    List<string> B=new List(){"C","D"}

     var m=  A.Except(B).ToList();

    此时 m集合中的对象就是{"A","B"}

    Except(IEnumerable<T>)

    通过使用默认的相等比较器对值进行比较生成两个序列的差集。 (由 Enumerable 定义。)

    通过使用指定的 IEqualityComparer<T> 对值进行比较产生两个序列的差集。

    示例:

      public class PublishStock
         {
             public string EID { get; set; }

             
            //证券编码 
             public string SECURITYCODE { get; set; }
             //证券简称
            public string SECURITYSHORTNAME { get; set; } 

             //  市场缩写
             public string MARKETABR { get; set; }

             //市场编码
             public string MARKETCODE { get; set; }  

         }


        public class PublishStockComparer : IEqualityComparer<PublishStock>
        {

            public bool Equals(PublishStock x, PublishStock y)
            {
                //Check whether the compared objects reference the same data.
                if (Object.ReferenceEquals(x, y)) return true;

                //Check whether any of the compared objects is null.
                if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
                    return false;

                //Check whether the products' properties are equal.
                return x.SECURITYCODE == y.SECURITYCODE && x.MARKETCODE == y.MARKETCODE;
            }

            public int GetHashCode(PublishStock product)
            {
                //Check whether the object is null
                if (Object.ReferenceEquals(product, null)) return 0;

                //Get hash code for the Name field if it is not null.
                int hashProductName = product.SECURITYCODE == null ? 0 : product.SECURITYCODE.GetHashCode();

                //Get hash code for the Code field.
                int hashProductCode =product.MARKETCODE==null?0: product.MARKETCODE.GetHashCode()

               //Calculate the hash code for the product.
                return hashProductName ^ hashProductCode;
            }

    注:当证券编码 ( SECURITYCODE)与 市场编码(MARKETCODE)相同时,表示对象相等;

    调用:

    PublishStock A=new PublishStock(){ EID="1",SECURITYCODE="001",SECURITYSHORTNAME="ZZ",MARKETCODE="100"}

    PublishStock B=new PublishStock(){ EID="2",SECURITYCODE="002",SECURITYSHORTNAME="ZZ",MARKETCODE="300"}

    PublishStock C=new PublishStock(){ EID="3",SECURITYCODE="001",SECURITYSHORTNAME="ZZ",MARKETCODE="100"}

    List<PublishStock> Lst_A=new List<PublishStock>(){A,B};

    List<PublishStock> Lst_B=new List<PublishStock>(){C};

    var m=Lst_A.Except(Lst_B,new  PublishStockComparer()).ToList();

    此时 m集合中的元素为{B};

  • 相关阅读:
    弹性盒子模型属性之flex-shrink
    Git----基本操作
    Git----简介
    ES6常用语法
    nginx学习
    Shell基础命令(二)
    Linux目录
    Shell基础命令(一)
    CRM之分页
    Django之ModelForm组件
  • 原文地址:https://www.cnblogs.com/h20064528/p/2584732.html
Copyright © 2011-2022 走看看