当前位置:编程学习 > C#/ASP.NET >>

在线请教:如何快速在两个List<T>中去掉重复数据!

我现在需要把互联网的数据列表爬取后插入到数据表中,但是之前需要判断,避免重复插入!

我的思路是: 把互联网的数据保存到 List<T> lstFromWeb , 把数据表中已有数据读取到 List<T> lstFromDB

现在如何能快速把 lstFromWeb中存在而lstFromDB中不存在的Item项选出来,插入到数据表中? 

在网上查了一下bloomFilter (布隆过滤器)感觉不是很会用,如果单纯的List去重是否也可以! --------------------编程问答--------------------

List<int> lstFromWeb = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            List<int> lstFromDB = new List<int> { 2, 3, 4, 7, 8 };
            List<int> newList = lstFromWeb.FindAll(x => !lstFromDB.Contains(x));//得到新的list 除去在fromdb含有的数据


类似这样的方式 不知道是否可以?? --------------------编程问答-------------------- http://blog.csdn.net/yl_99/article/details/7558230 --------------------编程问答--------------------
引用 1 楼 yyl8781697 的回复:
C# code
?



1234

List<int> lstFromWeb = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };             List<int> lstFromDB = new List<int> { 2, 3, 4, 7, 8 };             List<int> newList = lstFrom……

同意! --------------------编程问答-------------------- 这效率不低么?“你爬到一个数据就到 lstFromDB 里判断一下有没有”不好么? --------------------编程问答-------------------- 总算看明白了。
你打算把采集到的数据弄到List<T> lstFromWeb
把数据表中已有数据读取到 List<T> lstFromDB

比较一下,lstFromWeb不重复的数据可以进入到数据库。

哎,这个设计太蹩脚了。 --------------------编程问答-------------------- lambda表达式
交集,并集,差集都是很简单的,一句话搞定的
不过你这个情况,数据库应该直接做的 --------------------编程问答-------------------- 用Dictionary,把两组列表放进去,如果主键有重就不放 --------------------编程问答--------------------
引用 楼主 kv4000 的回复:
我现在需要把互联网的数据列表爬取后插入到数据表中,但是之前需要判断,避免重复插入!

我的思路是: 把互联网的数据保存到 List<T> lstFromWeb , 把数据表中已有数据读取到 List<T> lstFromDB

现在如何能快速把 lstFromWeb中存在而lstFromDB中不存在的Item项选出来,插入到数据表中? 

在网上查了一下bloomFilter (布隆过……

偷懒,在数据库中,把有重复的字段,设为主键 --------------------编程问答-------------------- 把数据放到map中Map<key,value>其中key为T的唯一id,value为T,map中的key是不会重复的,就避免重复数据了。 --------------------编程问答--------------------
引用 5 楼 winner2050 的回复:
总算看明白了。
你打算把采集到的数据弄到List<T> lstFromWeb
把数据表中已有数据读取到 List<T> lstFromDB

比较一下,lstFromWeb不重复的数据可以进入到数据库。

哎,这个设计太蹩脚了。


确实是这个意思,并且以后数据多了,效率会很低! 你有高见吗?星星 --------------------编程问答--------------------
引用 1 楼 yyl8781697 的回复:
C# code?123List<int> lstFromWeb = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9 };            List<int> lstFromDB = new List<int> { 2, 3, 4, 7, 8 };            List<int> newList = lstFromWeb.……

谢谢,正解,基本上是这个思路!有没搞笑的方法? --------------------编程问答-------------------- 讨论如何去除重复都是不正确的。

设计从根上就是错误的。

我作的CMS截止到今天,测试用的数据已经170万了,数据库18G了。

这些测试性能的数据都是通过采集功能采集过来的,如果我也用去除重复的方法,得要多大的内存,多么高科技的算法啊?

我能接受的误差是标题相同就当相同的文章,跳过采集了。

百度,谷歌采集到的网页很多内容是重复的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 最近也碰到类似问题,LZ最后怎么解决? --------------------编程问答-------------------- 采集的时候去数据库找一下不行么?
为毛还要全部采集出来再去对比  

--------------------编程问答-------------------- linq去重复 --------------------编程问答-------------------- 抓取数据的时候,抓到的 标题  去数据库查询如果已经存在则跳过进行下一条,如果不存在则保存

几乎所有的CMS采集信息都是这么干的,


如果按照楼主的思路   ,当数据过多的时候,首先存到list中内存可能不够了,其次N百万条数据去重比较效率很低。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,