숫자 값을 유지하면서 문자열을 알파벳순으로 정렬하는 방법
일부 문자열에 숫자 문자가 포함된 경우 문자열을 알파벳순으로 정렬하는 것이 어려울 수 있습니다. 숫자 변환이 금지된 경우 이러한 경우를 효과적으로 처리하려면 대체 접근 방식이 필요합니다.
한 가지 해결책은 숫자 값과 숫자가 아닌 값을 구별하는 사용자 지정 비교자를 활용하는 것입니다. 이 비교자를 OrderBy 메서드에 전달하여 정렬 기준을 사용자 지정할 수 있습니다.
다음은 Enumerable.OrderBy 메서드와 SemiNumericComparer 클래스를 사용한 구현 예입니다.
using System; using System.Collections.Generic; class Program { static void Main() { string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" }; foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer())) { Console.WriteLine(thing); } } public class SemiNumericComparer: IComparer<string> { /// <summary> /// Determine if a string is a number /// </summary> /// <param name="value">String to test</param> /// <returns>True if numeric</returns> public static bool IsNumeric(string value) { return int.TryParse(value, out _); } /// <inheritdoc /> public int Compare(string s1, string s2) { // Flags to indicate if strings are numeric var IsNumeric1 = IsNumeric(s1); var IsNumeric2 = IsNumeric(s2); // Handle numeric comparisons if (IsNumeric1 && IsNumeric2) { var i1 = Convert.ToInt32(s1); var i2 = Convert.ToInt32(s2); // Order by numerical value if (i1 > i2) { return 1; } if (i1 < i2) { return -1; } return 0; } // Handle cases where only one string is numeric if (IsNumeric1) { return -1; } if (IsNumeric2) { return 1; } // Default to alphabetical comparison return string.Compare(s1, s2, true, CultureInfo.InvariantCulture); } } }
이 코드는 다음과 같은 정렬 순서로 문자열을 정렬합니다.
007 90 bob lauren paul 101
위 내용은 숫자 순서를 유지하면서 포함된 숫자로 문자열을 알파벳순으로 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!