zoukankan      html  css  js  c++  java
  • 两个集合求差

     需求:从两个不同历史版本的数据库提取出相同的表数据(多个表)进行差异对比。

     实施:使用集合的Except扩展方法

     过程:开始想的是写代码循环比较差异,但是代码写起来比较繁琐,后来发现集合有一个Except扩展方法正是用来实现求差集的。

     部分代码如下

      EnumerableRowCollection<HtRefInfo> hta;
      EnumerableRowCollection<HtRefInfo> htb;
      hta = DalA.LoadHt(ids);
      htb = DalB.LoadHt(ids);
      var only_a_has = hta.Except(htb, new HtDiffEquality());//a有,b没有的
      
      //----------------------------------------------------------------------------
    
      HtDiffEquality类里定义了两个集合的比较规则
      public class HtDiffEquality : IEqualityComparer<HtRefInfo>
        {
            public bool Equals(HtRefInfo x, HtRefInfo y)
            {
                return (x.TableName == y.TableName && x.TableID == y.TableID && x.HtID == y.HtID);
            }
    
            public int GetHashCode(HtRefInfo obj)
            {
                if (obj == null)
                {
                    return 0;
                }
                else
                {
                    return obj.ToString().GetHashCode();
                }
            }
        }
    

     注意:如果两个集合的数据比较多,程序会比较慢。我实际的数据两个集合都有10万条数据,执行了10几分钟(电脑8g内存,I5)

     补充:除了except扩展方法,还有Intersect(求交集),Union(求并集)等。

     后期:这个扩展内部大概还是用循环写的吧,以后有时间要看看源码
     

  • 相关阅读:
    TCP协议-如何保证传输可靠性
    计算机网络基础(未完待续)
    计算机理论基础
    计算机网络
    操作系统与计算机网络
    Linux系统中的vi/vim指令【详解】
    Linux面试笔试题带答案【详解】
    关于梦想(五)
    Jmeter的安装教程【图文】
    关于梦想(四)
  • 原文地址:https://www.cnblogs.com/lanshanke/p/5014564.html
Copyright © 2011-2022 走看看