2014-11-11 6 views
-2

에서 작동하지 않습니다 어떤 이유 String.Compare 내가 문자열 값을 비교하기 위해 노력하고있어 더 큰 경우

lesser 
equal 

This prints:

using System; 

public class Test 
{ 
    public static void Main() 
    { 
     int cmpValue = String.Compare("N-1.2.0.10", "N-1.2.0.8", StringComparison.InvariantCultureIgnoreCase); 
     if(cmpValue > 0) 
      Console.WriteLine("greater"); 

     cmpValue = String.Compare("N-1.2.0.10", "N-1.2.1.10", StringComparison.InvariantCultureIgnoreCase); 
     if(cmpValue < 0) 
      Console.WriteLine("lesser"); 

     cmpValue = String.Compare("N-1.2.0.10", "N-1.2.0.10", StringComparison.InvariantCultureIgnoreCase); 
     if(cmpValue == 0) 
      Console.WriteLine("equal"); 
    } 
} 
greater 경우는 인쇄되지 않습니다. "N-1.2.0.10""N-1.2.0.8"보다 큰 것으로 간주되는 이유는 무엇입니까? 문자열이 아닌 숫자, 알파벳 순으로 정렬되어 있기 때문에 발생

+3

1은 문자를 비교할 때 8보다 작습니다 (숫자 비교가 아닙니다). –

+0

숫자 값을 분석하여 원하는 결과를 얻을 수 있도록 비교해야합니다. – juharr

+1

나는 이러한 _optimistic 프로그래밍 질문을 항상 좋아합니다. '12'는''Pi''보다 크지 만'Three'는 그들 사이에 있습니다. 그리고'III'는'3' 또는'Three'와 같지 않습니다! .NET이 올바른 일을하지 않는 이유는 무엇입니까? – HABO

답변

3

왜 것? 문자열 비교는 문자 단위로 수행되며 여기에는 적용 할 수없는 몇 가지 예외가 있습니다. '1''8'보다 작습니다.

"10""8" 이상인 정렬 유형은 "자연 정렬"이라고도하며 .NET Framework에서는 옵션을 직접 제공하지 않지만 만들면 쉽습니다. 자신 (or let the native WinAPI do the work).

+0

자연스러운 주문이 내가 찾고있는 것이었다. 고맙습니다! –

+1

또 다른 옵션은 분명히 버전 번호 인 부분을 추출하고'Version' 클래스를 사용하여 값을 파싱하고 비교하는 것입니다. –

2

:

10 
11 
12 
20 
8 
etc. 
+0

2 개의 답을 올바르게 표시 할 수는 없지만 upvote 할 수 있습니다. 고맙습니다! –

관련 문제