2017-11-11 13 views
3

私は2つのコレクションを交差しようとしています。コードスニペットには以下の2つのリストがあります。2つのコレクションの交差

これが私の出力です:

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(); 

ただ、最初にあなたのusingディレクティブにLINQを追加することを忘れないでください:

using System.Linq; 
+0

これは私が期待したとおりに動作しました!今度はDateTimeで同じアクションを実行できますか? –

4

あなたがEnumerable.Intersectの説明で読むことができたよう:

2つの集合AとBの交点は、 がBにも現れるAのすべての要素を含み、他の要素は ではない集合として定義されます。

setには、別個のオブジェクトしかありません。 1セットに4つの1を入れることは、それを1回だけ入れるのと同じです。 なぜ1つのエントリしか得られないのですか?

2

交差点は両方のリストで一意の一致要素を返します

関連する問題