• 两个集合求差


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

     实施:使用集合的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(求并集)等。

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

  • 相关阅读:
    java抽象类和接口
    java的三大特征:封装,继承和多态
    java的数组
    django 4.get接口开发
    django 3.post接口开发
    C# 程序启动最小化至任务栏及闪烁
    续Html5
    使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)框架
    Spring MVC拦截器
    Html5高级
  • 原文地址:https://www.cnblogs.com/lanshanke/p/5014564.html
Copyright © 2020-2023  润新知