2017-11-11 243 views
3

我想交集两个集合。我在代码片段中列出了两个列表。两个集合交集

这是我的输出:

Intersection 
1 

为什么只有一个价值发现的?这是预期的行为还是我做错了什么?

我希望我的输出是这样的:

Intersection 
1 
1 
1 
1 

我的代码:

// Collection initialization 
List<int> list1 = new List<int> { 1,1,1,1 }; 
List<int> list2 = new List<int> { 1,1,1,1,1,1,1,1,1,1,1 }; 

foreach (int q in list1) 
    Console.WriteLine("list1: " + q); 

Console.WriteLine("------------------"); 

foreach (int q in list2) 
    Console.WriteLine("list2: " + q); 

Console.WriteLine("------------------"); 
Console.WriteLine("Intersection"); 

IEnumerable<int> both = list1.Intersect(list2); 

foreach (int a in both) 
    Console.WriteLine(a); 

Console.ReadLine(); 
Console.Clear(); 

回答

2

LINQ让您的工作更加容易。使用Contains方法是这样的:

List<int> resultList = list1.Where(c => list2.Contains(c)).ToList(); 

只是不要忘了LINQ第一添加到您的使用指令:

using System.Linq; 
+0

这一个工作完全如我所料!是否有可能做同样的行动,但这次与DateTime? –

4

正如你可以在Enumerable.Intersect说明写着:

两个集合A和B的交集定义为 包含也出现在B中的A的所有元素,但不包含其他元素。

set中,您只有不同的对象。所以把四个1放在一个集合中就像只放一个一样。 这就是为什么你只有一个条目。

2

相交返回唯一匹配的元素在这两个列表