C# 操作2个list进行比较。

小雄 2013-08-23 03:37:50
现在有两个list,分别是list1,list2.
两个list都有相同的字段只是数据不一样,如:
list1:a list2:b
1 2
2 3
3 4

然后我想得出的结果是list1中有的而list2中没有的数据。

就是比较后,list1只有‘1’这个数据。

求一个详细而简单的例子!

最好不要循环。因为list1数据最少也是10W以上。。list的数据大概是100W
...全文
9397 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
why123qaz 2015-05-05
  • 打赏
  • 举报
回复
看起来好屌.
dethink 2014-11-10
  • 打赏
  • 举报
回复
感觉学到了许多
clark_kidd 2013-08-26
  • 打赏
  • 举报
回复
引用 29 楼 sp1234 的回复:
[quote=引用 5 楼 clark_kidd 的回复:] list 2 中的内容放入 hashTable list 1 中的内容逐个插入 list 2,发生 exception 就扔掉
通常我们不接受随便滥用exception的做法,因为你无法区分出到底是程序有某些bug还是真的属于 !hashtable2.ContainsKey(x) 的结果。 不要把bug当作逻辑控制,因为这会让将来诊断新问题时分不清真假。而且exception处理机制需要巨大的代价。 应该使用if(....containskey) 判断来预先设计程序流程,保留你还能分辨“到底有没有bug”的能力。[/quote] 受教了
HopeInHeart 2013-08-26
  • 打赏
  • 举报
回复 2
引用 13 楼 yangsen600 的回复:

        private List<int> ExceptList(List<int> a, List<int> b)
        {
            return (a.Except(b).ToList());
        }
顶下
jiaoshiyao 2013-08-26
  • 打赏
  • 举报
回复
我菜鸟 不敢谈算法
Sheldon_Lou 2013-08-26
  • 打赏
  • 举报
回复
引用 30 楼 clark_kidd 的回复:
[quote=引用 29 楼 sp1234 的回复:] [quote=引用 5 楼 clark_kidd 的回复:] list 2 中的内容放入 hashTable list 1 中的内容逐个插入 list 2,发生 exception 就扔掉
通常我们不接受随便滥用exception的做法,因为你无法区分出到底是程序有某些bug还是真的属于 !hashtable2.ContainsKey(x) 的结果。 不要把bug当作逻辑控制,因为这会让将来诊断新问题时分不清真假。而且exception处理机制需要巨大的代价。 应该使用if(....containskey) 判断来预先设计程序流程,保留你还能分辨“到底有没有bug”的能力。[/quote] 受教了[/quote] +1
  • 打赏
  • 举报
回复
b.Except(a).Tolist()
  • 打赏
  • 举报
回复
引用 5 楼 clark_kidd 的回复:
list 2 中的内容放入 hashTable list 1 中的内容逐个插入 list 2,发生 exception 就扔掉
通常我们不接受随便滥用exception的做法,因为你无法区分出到底是程序有某些bug还是真的属于 !hashtable2.ContainsKey(x) 的结果。 不要把bug当作逻辑控制,因为这会让将来诊断新问题时分不清真假。而且exception处理机制需要巨大的代价。 应该使用if(....containskey) 判断来预先设计程序流程,保留你还能分辨“到底有没有bug”的能力。
  • 打赏
  • 举报
回复
引用 26 楼 diaodiaop 的回复:
这么大的数据 全取出来 感觉思路就不对,,从哪取的? 数据库?
是这样的,这种问题总是很可疑。不过我们也只能说“可疑”,因为并不知道人家的设计的上下文,所以无法做稍微宏观一点的评估。
  • 打赏
  • 举报
回复
引用 23 楼 sj178220709 的回复:
[quote=引用 5 楼 clark_kidd 的回复:] list 2 中的内容放入 hashTable list 1 中的内容逐个插入 list 2,发生 exception 就扔掉
这是我见过的最搞笑的回复 [/quote] 这并不搞笑,因为他准确地知道利用list2的hash查找功能。虽然他滥用exception,但是应该看到他的长处。他的主意对于100w数据而言,远远超过“用linq啊”这种主意。
by_封爱 版主 2013-08-25
  • 打赏
  • 举报
回复
这么大的数据 全取出来 感觉思路就不对,,从哪取的? 数据库?
  • 打赏
  • 举报
回复
linq应该是普通方法的最优解了 不过感觉 从数据格式的角度看看 有没有优化的余地呢?
  • 打赏
  • 举报
回复
引用 5 楼 clark_kidd 的回复:
list 2 中的内容放入 hashTable list 1 中的内容逐个插入 list 2,发生 exception 就扔掉
这是我见过的最搞笑的回复
Dogfish 2013-08-24
  • 打赏
  • 举报
回复
100W的List也够大的了。 15楼的试试,我没有试过。
异常异长 2013-08-24
  • 打赏
  • 举报
回复
引用 2 楼 a346729576 的回复:

            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();
这样?
c#已经封装好了、
下山成精 2013-08-24
  • 打赏
  • 举报
回复
100W的数据占内存是应该复用。
  • 打赏
  • 举报
回复
.net具有 SortedList<K,T> 或者 Dictionary<K,T>。其查找效率基于什么原理,我想你应该知道,前者自动会使用二分查找方法,后者自动会使用HashCode查找方法。 关键是你的100W数据插入这样的数据结构,这也需要时间。所以最为可疑的是“你为什么要一次性把它们都读入内存呢?”。假设必须读入内存,那么你是否尽量复用这100w数据?
人生导师 2013-08-23
  • 打赏
  • 举报
回复
List<int> c = b.Except(a).ToList(); 轻松搞定
千杯不醉-sen 2013-08-23
  • 打赏
  • 举报
回复

        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;
        }
千杯不醉-sen 2013-08-23
  • 打赏
  • 举报
回复

        private List<int> ExceptList(List<int> a, List<int> b)
        {
            return (a.Except(b).ToList());
        }
加载更多回复(12)

110,533

社区成员

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

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

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