2013-06-20 4 views
39

좋아,이 기본적인 질문이 될 수도 있지만 답변을 주시면 감사하겠습니다.두 문자열 배열을 비교하는 C# #

string[] a = {"The","Big", "Ant"}; 
string[] b = {"Big","Ant","Ran"}; 
string[] c = {"The","Big","Ant"}; 
string[] d = {"No","Ants","Here"}; 
string[] e = {"The", "Big", "Ant", "Ran", "Too", "Far"}; 

만 A와 C가 진정한 부울를 얻을 것 같은 C#으로 그들을 통해 반복하지 않고 서로에게 이러한 문자열을 비교하는 방법이 있나요 :

우리는 다음과 같은 5 개 문자열 배열을 말해봐? 즉, 모든 요소가 동일해야하며 배열의 크기가 동일해야합니다. 가능하다면 루프를 사용하지 않아도됩니다. 미리 감사드립니다!

+0

string.Join을 사용하여 비교를 단순화 할 수 있으며 Linq를 사용하여 루프에서 벗어날 수 있지만 여전히 루프하고있는 후드에서 - 이유없이 루프를 사용하려고합니까? – Charleh

+0

은 http://stackoverflow.com/questions/2913287/comparing-arrays-using-linq-in-c-sharp 및 http://stackoverflow.com/questions/713341/comparing-arrays-in-c와 중복되는 것처럼 보입니다. -sharp –

답변

63

당신은 Linq에 사용할 수 있습니다 :

bool areEqual = a.SequenceEqual(b); 
+7

@WesField : 요구 사항이 "루핑하지 않음"_이기 때문에이 방법도 반복됩니다. 물론 반복하지 않고 여러 항목을 비교하는 것은 불가능합니다. 또한 값 유형 및 .NET 유형에 대해 기본적으로 사용되는 기본 비교자를 사용합니다. 커스텀 레퍼런스 타입의 경우, ['SequenceEqual'] (http://msdn.microsoft.com/en-us/library/bb342073.aspx)에 대해 커스텀'IEqualityComparer '을 만들고 /하거나 'Equals'와' GetHashCode'. –

+0

@TimSchmelter : 네, 루프가 장면 뒤에서 실행되고 있다는 것을 알았습니다. 나는 단지 무언가가 깨끗하고 깔끔하게 보이기를 원합니다. –

+6

두 배열의 값이 동일하지만 순서가 다른 경우 false를 반환합니다. – tdgtyugdyugdrugdr

13

Enumerable.SequenceEqual를 사용해보십시오 :

var equal = Enumerable.SequenceEqual(a, b); 
+1

또한 좋은 대답입니다. 이것과 Linq a.SequenceEqual (b)의 차이점을 설명해 주시겠습니까? –

+2

같은 것 - 확장 메서드 구문을 사용하는 것과 다른 메서드는 명시 적으로 확장 메서드를 사용합니다. 자세한 내용은 확장 메서드 sig를 참조하십시오. http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx – Charleh

+2

@WesField : 차이점이 없습니다. 확장 메서드는 정적 클래스의 정적 메서드입니다. 그래서 당신은 그것을 일반적인 정적 방법 (이 대답)으로 취급하거나 확장 방법 (Ahmed의 대답)으로 사용할 수 있습니다. –

3

당신이 한 번에 모두를 비교하려면 :

string[] a = { "The", "Big", "Ant" }; 
string[] b = { "Big", "Ant", "Ran" }; 
string[] c = { "The", "Big", "Ant" }; 
string[] d = { "No", "Ants", "Here" }; 
string[] e = { "The", "Big", "Ant", "Ran", "Too", "Far" }; 

// Add the strings to an IEnumerable (just used List<T> here) 
var strings = new List<string[]> { a, b, c, d, e }; 

// Find all string arrays which match the sequence in a list of string arrays 
// that doesn't contain the original string array (by ref) 
var eq = strings.Where(toCheck => 
          strings.Where(x => x != toCheck) 
          .Any(y => y.SequenceEqual(toCheck)) 
        ); 

반환 모두 일치 (당신을 아마도 내가 이미 일치하는 항목을 제외하도록 이것을 확장 할 수 있습니다)

+0

감사합니다. 아마도 이번에는 사용하지 않을 것이지만, 멋진 옵션입니다. –

-1
 if (a.Length == d.Length) 
     { 
      var result = a.Except(d).ToArray(); 
      if (result.Count() == 0) 
      { 
       Console.WriteLine("OK"); 
      } 
      else 
      { 
       Console.WriteLine("NO"); 
      } 
     } 
     else 
     { 
      Console.WriteLine("NO"); 
     } 
관련 문제