2011-09-04 4 views
1

두 개의 배열이 있고 공통된 요소가 있는지 가장 간단한 방법으로 알 수 있습니다. 그래서 실제로이 질문은 질문을해야합니다.가장 단순한 연결 (교차) 코드

string[] countries1 = new string[] { "USA", "Uruguay", "India", "UK"}; 
string[] countries2 = new string[] { "Urguay", "Argentina", "Brasil", "Chile" }; 
foreach (string country in countries1) 
    if (countries2.Contains(country)) 
     return true; 
return false; 
  1. country1 국가의이 country2 배열도 있으면 알려 드릴 것입니다 간단한 LINQ 쿼리는 무엇입니까?
  2. 모든 반복 국가의 배열을 반환하는 가장 간단한 linq 쿼리는 무엇입니까? 국가 1과 2 사이의 교차점에 대한

답변

9

1) var isIntersection = countries1.Intersect(countries2).Any();

2) var intersectedCountries = countries1.Intersect(countries2);

+0

첫 번째 예에서는 여분의 대괄호가 있습니다! –

+0

@ AS-CII 감사합니다. 나는 그것을 고쳤다. –

2

:

countries1.Intersect(countries2).ToArray()

+2

왜 '카운트'방법을 사용해야합니까? 내 의견으로는 'Any'가 낫다. :) –

+0

나는 "계산 중"이라는 질문을 잘못 이해했다. 동일한 배열 내에서 반복되는 항목을 세고있었습니다. 실제로 Any 메서드가이 경우 가장 좋습니다. –

1

Adilson의 대답은 질문 # 2를 커버하고, 질문 # 1

country1 국가 중 하나가 country2 배열에도있는 경우 알려주는 가장 간단한 linq 쿼리는 무엇입니까?

당신은 할 것 : .Count() 또는 .ToArray() 전체 목록을 반복하는 반면

countries1.Intersect(countries2).Any(); 

.Any()는 경기의 첫 번째 인스턴스에 true를 돌려줍니다. LINQ와

1

:

var commonCountries = countries1.Intersect(countries2); 

if (commonCountries.Any()) 
    // There are common countries. 

그러나, 이것은 당신이 수행 할 수 있습니다 무엇 등을 고려 문자열 케이스를 고려하지 않는 척이 함께 빠른 IEqualityComparer<string>입니다 :

public class OrdinalStringComparer : IEqualityComparer<string> 
{ 
    public bool Equals(string s1, string s2) 
    { 
     return string.Equals(s1, s2, StringComparison.OrdinalCultureIgnoreCase); 
    } 
    public int GetHashCode(string str) 
    { 
     return (str == null) ? 0 : str.GetHashCode(); 
    } 
} 

다음 통과 전화 번호 : Intersect 전화 번호 :

var commonCountries = countries1.Intersect(countries2, new OrdinalStringComparer()); 
관련 문제