首页 新闻 会员 周边 捐助

两个List取差集

1
悬赏园豆:50 [已解决问题] 解决于 2015-12-24 16:49

List<order> list1=new List<order>();  List<order> list2=new List<order>();  假如他们两数据都是上1000w  如何取差集最佳,用linq提供的方法except()  有点慢

等待是一生最初的苍老的主页 等待是一生最初的苍老 | 初学一级 | 园豆:3
提问于:2015-05-08 23:01
< >
分享
最佳答案
-1

楼上的几位都是在瞎扯蛋,他们都是随口说说,根本不注意实际情况,甚至连试一下都不肯。1000万,而且2个1000万数据。能放到内存里么?我觉得吧,对于初学者,像这种数据处理,问题,如果遇到大的数据。就直接放到数据库里处理,因为数据库已经帮我们把这些问题都实现好了,而且不会出现乱七八糟的内存溢出,和线程错乱的问题。而且这是最容易理解,最简单的,最有效果的做法

收获园豆:22
需要格局 | 老鸟四级 |园豆:2145 | 2015-05-11 09:53
其他回答(9)
0

可以自己定义一个

IEqualityComparer

试试

收获园豆:5
Yu | 园豆:12990 (专家六级) | 2015-05-09 08:32
0

可以用多线程!

收获园豆:5
凡一二三 | 园豆:85 (初学一级) | 2015-05-09 08:40
0

你的内存真多

收获园豆:1
爱编程的大叔 | 园豆:30844 (高人七级) | 2015-05-09 09:18
0

扔到数据库对比?

收获园豆:1
幻天芒 | 园豆:37207 (高人七级) | 2015-05-09 09:33
0

试试HashSet

public List<string> GetIntersection2(List<string> list1, List<string> list2)
{
    List<string> list3 = new List<string>();

    HashSet<string> hashSet = new HashSet<string>();

    foreach (string item in list1)
    {
        hashSet.Add(item);
    }

    foreach (string item in list2)
    {
        if (hashSet.Add(item) == false)
        {
            list3.Add(item);
        }
    }

    return list3;
}

收获园豆:10
at小怪兽 | 园豆:760 (小虾三级) | 2015-05-09 09:51
0

楼上的办法比较好

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-09 13:30
0

取差集,List有现成的方法:

var expectedList = list1.Except(list2);

但是如果真的追求高性能,综合楼上各位的答案,使用HashSet+多线程,省空间+时间。

JeffWong | 园豆:2328 (老鸟四级) | 2015-05-09 20:36
0

1000W条记录放到List<X>中不会出问题.

我试过,我的机器8G内存.

收获园豆:3
hexllo | 园豆:318 (菜鸟二级) | 2015-05-11 16:48

呵呵…… 两个List 而且X 你是几个字段?每个字段赋值为多少?把你的代码放上来哈……

支持(0) 反对(0) 需要格局 | 园豆:2145 (老鸟四级) | 2015-05-11 17:44

1000W条,占用的内存应该是GB级别的吧。我觉得应该放数据库里比较。

支持(0) 反对(0) zhoumy | 园豆:603 (小虾三级) | 2015-05-18 17:37

@zhoumy: 放DB里也是不错的方法,只是插入的时候费点时间,如果速度有要求,并且服务器内存大,可以考虑一下内存比较的.

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2015-05-18 17:40

@hexllo: 一个操作就导致GB级别的内存被占用,假如list里面一个对象占用50字节,2000W个对象算下来就是10GB?如果我没有算错的话。万一一下子有几个请求都要做这个操作,想想就觉得疯狂。。。

支持(0) 反对(0) zhoumy | 园豆:603 (小虾三级) | 2015-05-19 09:17

@zhoumy: 你赢了

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2015-05-19 17:55
0

期待更完美的解决方案

收获园豆:3
Froyo | 园豆:494 (菜鸟二级) | 2015-05-25 11:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册