请问:怎样能快速比较两个list数据

wlmwwx 2012-07-04 04:19:21
请教大家一个问题。我有两个listA,B,每个里面有100万以上的号码或者字符串,怎样能快速得到在A中但不在B中的数据?
我目前试了两种办法,但都不是很好。
第一种:
遍历A中的每个元素,如果不在B中,记录下来。大概需要10分钟时间。
第二种,把这些数据导入到ACCESS数据库中的两个表中。用sql语句查询
delete from A where num in (select num from B);
最后A中剩下的就是需要的。这个大概需要3分多。

请问有没有更快的方法?谢谢
...全文
1488 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlmwwx 2012-07-11
  • 打赏
  • 举报
回复
忘了说了,hashset用的是a.ExceptWith(B)比较的。谢谢。
wlmwwx 2012-07-11
  • 打赏
  • 举报
回复
给大家汇报一下,我的两个list里有大概80万条记录,用linq和hashset都很快,不到1s就能比出结果。谢谢大家了。
wlmwwx 2012-07-04
  • 打赏
  • 举报
回复
谢谢大家,我重装机器了,等测试完给大家汇报一下,然后结贴散分。
wuya2672097 2012-07-04
  • 打赏
  • 举报
回复
using System.Linq;



var c=a.Except(b);
叫我三三 2012-07-04
  • 打赏
  • 举报
回复
你的sql用的不是最优的,应该用EXCEPT
具体用法如下:

SELECT DataID FROM table1
EXCEPT
SELECT OldId FROM table2

lizhibin11 2012-07-04
  • 打赏
  • 举报
回复
用linq比较快,下面的方法可能更快一些。

HashSet<string> h1 = new HashSet<string>(A);
HashSet<string> h2 = new HashSet<string>(B);
List<string> list = new List<string>();
foreach (string s in h1)
if (!h2.Contains(s))
list.Add(s);
E次奥 2012-07-04
  • 打赏
  • 举报
回复
楼上的方法非常好,简单啊!
threenewbee 2012-07-04
  • 打赏
  • 举报
回复
用linq
a.Except(b),应该是最快的。
bdmh 2012-07-04
  • 打赏
  • 举报
回复
Linq
var reslut = A.Except(B);

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧