ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] string.Compare(String, String), Array.Sort()
    C# Visual Studio/2 2023. 12. 29. 20:40

    string.Compare(String, String)

    지정된 두 String 개체를 비교하고 정렬 순서에서 두 개체의 상대 위치를 나타내는 정수( -1, 0, 1)를 반환합니다.

    *문자의 값(아스키 코드)이 아닌 정렬순서를 비교하여, 앞에오면 -1, 같으면 0, 뒤에오면 1을 반환합니다.

    예를 들어 가방과 나침반을 비교하면, string.Compare("가방", "나침반") 나침반이 문자의 값이나 길이가 더 길지만, 정렬순서로는 가방이 나침반의 앞에 위치하므로, -1 값을 반환받습니다. 반대로 string.Compare("나침반", "가방") 을 하게되면, 1값을 반환받습니다.

    using System.Diagnostics.CodeAnalysis;
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                string str1 = "가방";
                string str2 = "나침반";
                Console.WriteLine(string.Compare(str1 ,str2));      // -1
                Console.WriteLine(string.Compare(str2 ,str1));      // 1
            }
        }
    }

     

     

    아래의 스크립트는, 이 함수가 문자의 값으로 비교하는 함수인지 착각하게만든 예제이다.

    using System.Diagnostics.CodeAnalysis;
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                string str1 = "A";
                string str2 = "a";
                Console.WriteLine(string.Compare(str1 ,str2));  // 1 값을 반환받았다.
            }
        }
    }

     

    내가 알고있는 정렬방식으로는, 대문자 A가 소문자a보다 앞에 위치해야하는데, 1 값을 반환받은것을 보고, 문자의 값으로 비교하는 함수로  착각했었다. 하지만 Array.Sort() 함수를 사용하여 정렬순서를 확인해본 결과, string.Compare(String, String)는 문자의 값이아닌, 정렬순서를 비교하여 값을 반환한게 맞았다.

     

    Array.Sort()

    이 함수는, 배열을 오름차순으로 정렬한다. 이 함수를 사용해서 C#의 정렬순서를 알아보았다.

    using System.Diagnostics.CodeAnalysis;
    
    namespace ConsoleApp1
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                string[] str3 = { "b", "d", "a", "D", "A" };
                Array.Sort(str3);
                foreach(string strs in str3)
                {
                    Console.WriteLine(strs); // a,A,b,d,D 순으로 정렬되었다.
                }
            }
        }
    }

     

     

    내가 알고있는 정렬순서와 다르게 작용하여, C#의 정렬순서에 대해 알아보았다.

    *문자열의 문자 및 정렬 규칙은 사용자 컴퓨터의 로컬에따라 달라질수 있고, 똑같은 문자가 포함된 문자열 이라도 현재 스레드의 문화권에 따라 다르게 정렬될 수 있다고 한다. 문화권이 사용자에 의해 설정되지 않은 경우, 기본적으로 운영 체제 설정으로 설정되며, 데이터가 언어적으로 관련되는 경우와 문화권이 구분되는 사용자 조작을 반영하는 경우에는 항상 현재 문화권을 기준으로 한 비교를 사용해야 한다. 그러나 문화권이 변경되면 .NET의 비교 및 대/소문자 지정 동작도 바뀌게된다. 애플리케이션이 개발된 컴퓨터와 다른 문화권을 포함하는 컴퓨터에서 애플리케이션을 실행하거나 실행 스레드가 문화권을 변경할 경우 이 동작이 수행된다.*

Designed by Tistory.