当前位置:  开发笔记 > 编程语言 > 正文

检查两个List <int>的相同数字

如何解决《检查两个List<int>的相同数字》经验,为你挑选了3个好方法。

我有两个List,我想检查相应的数字.

例如

List a = new List(){1, 2, 3, 4, 5};
List b = new List() {0, 4, 8, 12};

应该给出结果4.有没有一个简单的方法来做到这一点,而没有太多循环列表?

我在3.0的项目中需要这个,所以没有Linq.



1> ljs..:

您可以使用.net 3.5 .Intersect()扩展方法: -

List a = new List() { 1, 2, 3, 4, 5 };
List b = new List() { 0, 4, 8, 12 };

List common = a.Intersect(b).ToList();



2> kirkus..:

Jeff Richter出色的PowerCollections设置了交叉点.一直工作回.NET 2.0.

http://www.codeplex.com/PowerCollections

        Set set1 = new Set(new[]{1,2,3,4,5});
    Set set2 = new Set(new[]{0,4,8,12});
    Set set3 = set1.Intersection(set2);



3> Jon Skeet..:

你可以像LINQ那样有效地做到这一点 - 用一套.现在在3.5之前我们没有一个合适的集合类型,所以你需要使用Dictionary或类似的东西:

使用元素作为条目的键和值,Dictionary从列表创建并填充它a.(条目中的值确实无关紧要.)

为交叉点创建一个新列表(或者将其写为迭代器块,无论如何).

迭代列表b,并使用dictionary.ContainsKey检查:如果是,请在列表中添加一个条目或者将其生成.

那应该是O(N + M)(即两个列表大小都是线性的)

请注意,如果列表b包含重复项,则会为您提供重复的条目.如果您想避免这种情况,当您第一次在列表中看到它时,您总是可以更改字典条目的值b.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有