-
[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의 비교 및 대/소문자 지정 동작도 바뀌게된다. 애플리케이션이 개발된 컴퓨터와 다른 문화권을 포함하는 컴퓨터에서 애플리케이션을 실행하거나 실행 스레드가 문화권을 변경할 경우 이 동작이 수행된다.*
'C# Visual Studio > 2' 카테고리의 다른 글
[C#] Linq Enumerable.Zip (1) 2024.01.23 [C#] string.PadLeft, string.PadRight (0) 2024.01.17 [C#] Console.CursorLeft , Console.CursorTop , Console.SetCursorPosition() (0) 2024.01.10 [C#] JsonConvert, StreamWrite, StreamReader, File.Exists (1) 2024.01.04