救急啊。。。。。
|
|
28分 |
List<int> a = new List<int>() { 1, 2, 3, 6, 8, 7 }; List<int> b = new List<int>() { 1, 2, 3, 4, 5, 6 }; List<int> c = b.Except(a).ToList(); foreach (int i in c) { Console.WriteLine(i); //4 5 } Console.Read(); 这样? |
如果是数据库的话left join下判断b是空的应该可以取出来吧
|
|
数据都是整数么,是的话能不能先把list1和List2的数据进行基数排序,然后就基于值和索引的查询。
|
|
list 2 中的内容放入 hashTable
list 1 中的内容逐个插入 list 2,发生 exception 就扔掉 |
|
10分 |
List<int> a = new List<int> { 1,2,3}; List<int> b = new List<int> { 2,3,3}; a= a.Except(b).ToList(); 求差集就可以了 |
额。。这个方法我也找到了。。我先试试。。主要是要看性能好不好。要快速的。。 |
|
大数据量的,确实没有遇到过,学习下
|
|
用linq试试
|
|
10分 |
a.Except(b).ToList()
|
5分 |
这个轻松搞定。。 |
写个循环都不会吗
|
|
10分 |
private List<int> ExceptList(List<int> a, List<int> b) { return (a.Except(b).ToList()); } |
private List<int> ExceptList(List<int> a, List<int> b) { List<int> c = new List<int>(); foreach (int i in a) { if (!b.Contains(i)) { c.Add(i); } } return c; } |
|
10分 |
List<int> c = b.Except(a).ToList(); 轻松搞定
|
100W的List也够大的了。
15楼的试试,我没有试过。 |
|
.net具有 SortedList<K,T> 或者 Dictionary<K,T>。其查找效率基于什么原理,我想你应该知道,前者自动会使用二分查找方法,后者自动会使用HashCode查找方法。
关键是你的100W数据插入这样的数据结构,这也需要时间。所以最为可疑的是“你为什么要一次性把它们都读入内存呢?”。假设必须读入内存,那么你是否尽量复用这100w数据? |
|
100W的数据占内存是应该复用。
|
|
5分 |
c#已经封装好了、 |
10分 |
b.Except(a).Tolist()
|
这是我见过的最搞笑的回复 |
|
linq应该是普通方法的最优解了
不过感觉 从数据格式的角度看看 有没有优化的余地呢? |
|
这么大的数据 全取出来 感觉思路就不对,,从哪取的? 数据库?
|
|
这并不搞笑,因为他准确地知道利用list2的hash查找功能。虽然他滥用exception,但是应该看到他的长处。他的主意对于100w数据而言,远远超过“用linq啊”这种主意。 |
|
5分 |
是这样的,这种问题总是很可疑。不过我们也只能说“可疑”,因为并不知道人家的设计的上下文,所以无法做稍微宏观一点的评估。 |
5分 |
通常我们不接受随便滥用exception的做法,因为你无法区分出到底是程序有某些bug还是真的属于 !hashtable2.ContainsKey(x) 的结果。 不要把bug当作逻辑控制,因为这会让将来诊断新问题时分不清真假。而且exception处理机制需要巨大的代价。 应该使用if(….containskey) 判断来预先设计程序流程,保留你还能分辨“到底有没有bug”的能力。 |
受教了 |
|
+1 |
|
我菜鸟 不敢谈算法
|
|
2分 |
private List<int> ExceptList(List<int> a, List<int> b) { return (a.Except(b).ToList()); } 顶下 |
感觉学到了许多
|
|
看起来好屌.
|