2012-11-24 3 views
3

이 가능한 중복 : 나는
Comparing two collections for equality확인 목록이 경우

이 두 목록

List<int> Foo = new List<int>(){ 1, 2, 3 }; 

List<int> Bar = new List<int>(){ 2, 1 }; 
그들은 같은 요소가있는 경우

를 찾으려면 여부 나는

if(Foo.Except(Bar).Any() || Bar.Except(Foo).Any()) 
{ 
    //Do Something 
} 

을했지만이 두 부울 평가가 필요합니다. 먼저 Foo.Except(Bar).Any()을 입력 한 다음 Bar.Except(Foo).Any()을 입력합니다. 단일 평가에서이를 수행 할 수있는 방법이 있습니까?

+0

두 결과 모두 동일한 요소가 있는지 또는 컬렉션의 모든 요소가 동일한 지 (다른 순서 일 수 있음) 찾을 수 있습니까? –

+0

@ lazyberezovsky : 순서는 중요하지 않습니다. 그냥 요소가 Foo에 있고 Bar에 없거나 Foo에없는 Bar에 있는지 확인하는 것입니다. –

답변

-3

두 번 확인하지 않아도됩니다. 그냥이 (관련 예외가 널 (null) 일 수있다, 푸에주의를 지불하고 던져) 또한 당신이 그 목록 중 하나 또는 둘 모두가 비어 있는지 확인해야 먼저 확인 할 수 있습니다

if(Foo.Intersect(Bar).Any()) 
{ 
    //Do Something 
} 

또는 그런 짓을 null ..하지만 상황이 당신을 위해 어떤 특별한 가치가있는 경우에만.

+0

주어진 예제에서는 true를 반환하지만 거짓이어야합니다. – Uriil

+0

확실히 작동할까요? –

+0

포스터가 원하는 것 같지 않습니다. 모든 요소가 공유되는 경우가 아니라 두 요소간에 공유되는 요소가 있는지 알려줍니다. –

1
 var sharedCount = Foo.Intersect(Bar).Count(); 
     if (Foo.Distinct().Count() > sharedCount || Bar.Distinct().Count() > sharedCount) 
     { 
      // there are different elements 
     } 
     { 
      // they contain the same elements 
     } 
+0

'Union'은 결과에'Distinct'를 적용합니다. 따라서 초기 시퀀스에 뚜렷하지 않은 요소가있는 경우 개수가 동일하지 않을 수 있습니다. –

관련 문제