LINQ의 영숫자 순서
LINQ에서 OrderBy 메서드는 알파벳과 숫자를 모두 순서대로 고려하는 사전순 정렬 규칙을 따릅니다. 그러나 숫자 값으로 끝나는 문자열을 정렬하는 경우 이 순서로 원하는 결과가 나오지 않을 수 있습니다.
다음 예를 고려하세요.
string[] partNumbers = { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" }; var result = partNumbers.OrderBy(x => x);
사전식 순서에 따른 실제 결과는
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
그러나 예상되는 결과는 숫자에 관계없이 유사한 알파벳 순서를 함께 그룹화하는 것입니다. 접미사. 이를 위해서는 순서 기준을 수정해야 합니다.
영숫자순 정렬의 핵심은 패딩된 숫자 부분을 비교하는 것입니다. 숫자 값에 0을 채워 LINQ가 숫자 값을 적절하게 구분할 수 있도록 합니다. 이를 수행하는 방법은 다음과 같습니다.
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
이 함수는 입력 문자열 내의 모든 숫자에 0을 채웁니다. LINQ에서 이 함수를 순서 기준으로 사용하면 다음과 같은 예상 결과를 얻을 수 있습니다.
var result = partNumbers.OrderBy(x => PadNumbers(x));
결과 목록은 이제 다음과 같이 순서가 지정됩니다.
AB1 AB2 AB11 ...
이 접근 방식은 최대값을 가정합니다. 숫자 부분의 자릿수는 알려져 있습니다. 더 복잡한 경우에는 비교 기준을 더욱 세밀하게 제어할 수 있는 사용자 지정 IComparer 구현을 고려해 보세요.
위 내용은 숫자 접미사를 사용하여 LINQ에서 영숫자 순서를 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!