2017-11-11 377 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

相交返回唯一匹配的元素在這兩個列表