Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# String.CompareOrdinal() 메서드 완벽 정리: 문자열 서수 비교 방법과 예제 코드

C#의 CompareOrdinal() 메서드는 두 개의 지정된 String 객체를 비교할 때, 각 문자열에 포함된 대응되는 Char 객체들의 숫자 값(유니코드 코드 포인트)을 기준으로 평가하는 정적 메서드입니다. 일반적인 문화권 기반 문자열 비교와 달리, 이 메서드는 사전순서가 아닌 각 문자의 실제 숫자 값을 직접 비교하기 때문에 빠르고 문화권에 독립적인 결과를 제공합니다.

문법(Syntax)

public static int CompareOrdinal (string str1, string str2);

위 문법에서 str1str2는 서로 비교할 두 문자열입니다.

반환값

  • 0보다 작은 값: str1이 str2보다 앞에 오는 경우 (str1 < str2)
  • 0: 두 문자열이 동일한 경우 (str1 = str2)
  • 0보다 큰 값: str1이 str2보다 뒤에 오는 경우 (str1 > str2)

반환되는 숫자 값 자체는 두 문자열에서 처음으로 다른 문자가 나타나는 위치의 문자들 간 숫자 값 차이를 의미합니다. 예를 들어 'A'(65)와 'K'(75)를 비교하면 65 - 75 = -10이 반환됩니다.

예제 1: 기본 사용법

using System;
public class Demo {
    public static void Main(string[] args) {
        string s1 = "Amy";
        string s2 = "Katie";
        string s3 = s2;
        Console.WriteLine("String1 = "+s1);
        Console.WriteLine("String2 = "+s2);
        Console.WriteLine("두 문자열이 같은가? = "+s1.Equals(s2));
        Console.WriteLine("두 문자열이 같은가? = "+s2.Equals(s3));
        Console.WriteLine(string.CompareOrdinal(s1, s2));
        Console.WriteLine(string.CompareOrdinal(s2, s3));
    }
}

출력 결과

String1 = Amy
String2 = Katie
두 문자열이 같은가? = False
두 문자열이 같은가? = True
-10
0

위 예제에서 "Amy"와 "Katie"를 비교하면 첫 번째 문자 'A'와 'K'의 유니코드 값 차이(65 - 75)로 인해 -10이 반환됩니다. 반면 s2와 s3은 동일한 문자열을 참조하므로 0이 반환됩니다.

예제 2: 여러 문자열 비교

using System;
public class Demo {
    public static void Main(string[] args) {
        string s1 = "David";
        string s2 = "David";
        string s3 = s2;
        string s4 = "Tom";
        string s5 = s4;
        Console.WriteLine("String1 = "+s1);
        Console.WriteLine("String2 = "+s2);
        Console.WriteLine("String3 = "+s3);
        Console.WriteLine("String4 = "+s4);
        Console.WriteLine("String5 = "+s5);
        Console.WriteLine("s1과 s2가 같은가? = "+s1.Equals(s2));
        Console.WriteLine("s2와 s3가 같은가? = "+s2.Equals(s3));
        Console.WriteLine("s3와 s4가 같은가? = "+s3.Equals(s4));
        Console.WriteLine("s4와 s5가 같은가? = "+s4.Equals(s5));
        Console.WriteLine(string.CompareOrdinal(s1, s2));
        Console.WriteLine(string.CompareOrdinal(s2, s3));
        Console.WriteLine(string.CompareOrdinal(s3, s4));
        Console.WriteLine(string.CompareOrdinal(s4, s5));
    }
}

출력 결과

String1 = David
String2 = David
String3 = David
String4 = Tom
String5 = Tom
s1과 s2가 같은가? = True
s2와 s3가 같은가? = True
s3와 s4가 같은가? = False
s4와 s5가 같은가? = True
0
0
-16
0

이 예제에서 "David"와 "Tom"을 비교하면 두 번째 문자 'a'(97)와 'o'(111)의 차이인 -16이 반환됩니다. 첫 번째 문자 'D'와 'T'도 다르지만, CompareOrdinal은 첫 번째로 다른 문자의 차이를 그대로 계산합니다('D'=68, 'T'=84이므로 68-84=-16).

CompareOrdinal()과 Compare()의 차이점

CompareOrdinal()은 문자의 숫자 값을 직접 비교하는 반면, Compare()는 현재 스레드의 문화권(culture) 정보를 고려하여 문자열을 비교합니다. 따라서 언어 규칙에 맞는 정렬이 필요하다면 Compare()를, 빠르고 일관된 바이트 수준 비교가 필요하다면 CompareOrdinal()을 사용하는 것이 좋습니다.