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

解决方案 »

  1.   

    本帖最后由 bdmh 于 2012-07-04 16:23:18 编辑
      

  2.   

    用linq
    a.Except(b),应该是最快的。
      

  3.   

    用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);
      

  4.   

    你的sql用的不是最优的,应该用EXCEPT
    具体用法如下:SELECT DataID FROM table1
    EXCEPT
    SELECT OldId FROM table2
      

  5.   

    using System.Linq;var c=a.Except(b);
      

  6.   

    给大家汇报一下,我的两个list里有大概80万条记录,用linq和hashset都很快,不到1s就能比出结果。谢谢大家了。
      

  7.   

    忘了说了,hashset用的是a.ExceptWith(B)比较的。谢谢。