2012-07-23 3 views
0

두 문자열 배열에서 SQL MINUS의 equivelent를 수행하려고합니다.람다 식에서 MINUS 두 문자열 배열

 string returnValue = ""; 
     foreach (string eachWord in allWords) 
     { 
      foreach (string ignoreWord in ignoreWords) 
      { 
       if (eachWord != ignoreWord) 
       { 
        returnValue += eachWord; 
       } 
      } 
     } 

나는대로이를 다시 작성하려면 :

returnValue = allWords.Minus(ignoreWords); 

또는 동등 간결 뭔가 저는 여기에 복제하기 위해 노력하고있어 코드입니다. 나는 장면 뒤에서 같은 코드로 끝날 것임을 알지만, 나는 단지 대담 해지고있다! 당신이 IEnumerable<string>에만 문자열이 아닌를 갖고 싶어

+1

뒤에 e 장면은 ** 같은 코드를 얻지 못할 것입니다. 귀하의 코드는 O (M * N)입니다. 여기서 M은'allWords'의 크기이고 N은'ignoreWords'의 크기입니다. Linq의'Except'에서 사용 된 알고리즘이 더 적절히 구현되면 O (N + M)을 얻을 수 있습니다. 핵심은 O (1) 검색을 사용하는 HashSet에 하나의 컬렉션을 저장하는 것입니다. 중첩 된 루프가 있으면 하나의 루프 (설정 항목 추가)와 다른 단일 루프 (검색 수행)가 있습니다. – Servy

답변

8
returnValue = allWords.Except(ignoreWords); 
0

, 당신은 이런 식으로 그것을 할 수 있습니다 : 다음

var res = allWords.Except(ignoreWords); 

하고,

StringBuilder sb = new StringBuilder(); 
     res.ForEach(item => sb.Append(item)); 
     string ss = sb.ToString(); 

또는 일부 분리를 원하는 경우 다음과 같이 할 수 있습니다 :

string concatenatedStr = string.Join(",", res.ToArray()); 
관련 문제