两个集合求差
2015-12-02 22:32
274 查看
需求:从两个不同历史版本的数据库提取出相同的表数据(多个表)进行差异对比。
实施:使用集合的Except扩展方法
过程:开始想的是写代码循环比较差异,但是代码写起来比较繁琐,后来发现集合有一个Except扩展方法正是用来实现求差集的。
部分代码如下
注意:如果两个集合的数据比较多,程序会比较慢。我实际的数据两个集合都有10万条数据,执行了10几分钟(电脑8g内存,I5)
补充:除了except扩展方法,还有Intersect(求交集),Union(求并集)等。
后期:这个扩展内部大概还是用循环写的吧,以后有时间要看看源码
实施:使用集合的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(求并集)等。
后期:这个扩展内部大概还是用循环写的吧,以后有时间要看看源码
相关文章推荐
- HDU 4550-卡片游戏-贪心-字符串
- Java之跳出多重循环
- AT&T汇编与GCC内嵌汇编语法
- linux串口驱动分析
- Git版本控制管理学习笔记4-文件管理和索引
- 实验三 进程调度模拟程序
- Factorial Trailing Zeroes
- HTTP Header 详解
- NGINX (轻量级的负载均衡服务器)基本的安装配置
- 如何让DIV相对于body水平和垂直居中
- Linux 汇编语言(GNU GAS汇编)开发指南
- 决策树系列算法总结(ID3, C4.5, CART, Random Forest, GBDT)
- redhat 6.4 双网卡绑定
- 半个月使用rust语言的体验
- 使用Team Explorer Everywhere (TEE) 2015 SDK获取团队项目的签入策略
- NoSQL选型
- Spring+WebSocket+SockJS实现实时聊天
- JAVA——实现多线程
- 03-加入苹果开发者计划
- Android存储访问与Environment类