2013-05-13 3 views
1

2 문자열 배열이 있습니다. 하나는 기본이고 다른 하나는 변화하고 있습니다.2 문자열 배열 사이의 첫 번째 일치 얻는 방법

string[] baseArray = { "Gold", "Silver", "Bronze" }; 
string[] readArray = { "Bronze", "Silver", "Gold" }; 

// After comparing the readArray over the baseArray the result should be this 
//string match = "Gold"; 

1 번을 baseArray 순서로 가져오고 싶습니다. LINQ를 사용하여

//Example2 
string[] readArray = { "Bronze", "Silver" }; 
//string match should be "Silver" 

답변

5

당신은 단지 하나 개의 결과를 원하는 경우는 : 당신은 단지 하나 개의 결과를 원하는 경우에

string firstMatch = baseArray.FirstOrDefault(readArray.Contains); 

, LINQ를 사용하지 :

string firstMatch = null; 
foreach(string element in baseArray) 
{ 
    if (Array.IndexOf(readArray, element) >= 0) 
    { 
     firstMatch = element; 
     break; 
    } 
} 

당신이 일치하는 모든 요소를 ​​원하는 경우에 사용 LINQ :

string[] common = baseArray.Intersect(readArray).ToArray(); 

LINQ 사용하지 L 정합 소자 : 광산보다

HasSet<string> common = new HashSet<string>(readArray); 
result.Intersect(baseArray); 
+0

+1 나은 솔루션. 그래도 결국'FirstOrDefault()'를 할 것입니다. –

+0

그는 첫 번째 경기가 전부가 아님을 원합니다. –

+0

@ 팀 : 대답을 수정했습니다. –

1
var match = baseArray.FirstOrDefault(x => readArray.Contains(x)); 
+0

에 포함되어 있으면 잘못된 결과가 나올 수도 있습니다. 아마도 equals를 사용할 수 있습니다. – Incognito

+0

@Incognito'.Contains()'는 뒤에 .Equals()를 사용합니다. 하나가 실패하면 둘 다 있습니다. –

+0

@Incognito. 왜 실패해야합니까? 문화 때문에? –

관련 문제