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(求并集)等。

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

  • 相关阅读:
    希尔排序之C++实现(初级版)
    CF9D How many trees?
    IOI2015 boxes纪念品盒
    CSP-S 2019图论总结
    数据生成器
    Special-Judge模板
    CF293B Distinct Paths
    浅谈几种常见的剪枝方式
    CF620E New Year Tree
    浅谈DFS序
  • 原文地址:https://www.cnblogs.com/lanshanke/p/5014564.html
Copyright © 2011-2022 走看看