2017-11-11 11 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에는 고유 한 개체 만 있습니다. 그래서 4 개의 1을 세트에 넣는 것은 단지 1 개의 세트에 넣는 것과 같습니다. 하나의 항목 만 얻는 이유는 무엇입니까?

2

두 개의 목록에서 고유 한 일치 요소를 반품합니다.