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

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

  • 相关阅读:
    Python round() 函数
    Python pow() 函数
    图像角点检测
    计算机视觉解析力
    空间点像素索引(三)
    空间点像素索引(二)
    空间点像素索引(一)
    相机标定实用方案
    摄像头的主要参数
    多篇开源CVPR 2020 语义分割论文
  • 原文地址:https://www.cnblogs.com/lanshanke/p/5014564.html
Copyright © 2011-2022 走看看