>백엔드 개발 >C++ >LINQ OrderBy와 함께 사용자 지정 IComparer를 사용하여 목록을 정렬하는 방법은 무엇입니까?

LINQ OrderBy와 함께 사용자 지정 IComparer를 사용하여 목록을 정렬하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-03 09:49:40655검색

How to Sort a List Using a Custom IComparer with LINQ OrderBy?

사용자 정의 IComparer 사용 Linq OrderBy

이 기사에서는 사용자 정의 IComparer를 활용하는 방법을 살펴보겠습니다. 특정 정렬 동작을 달성하기 위해 LINQ OrderBy와 인터페이스합니다.

제시된 시나리오에는 "200906/1" 형식의 InvoiceNumber 속성이 있는 개체가 포함된 일반 목록이 포함됩니다. 목표는 InvoiceNumber 속성 내의 숫자 값을 고려하는 사용자 정의 정렬 논리에 따라 이 목록을 정렬하는 것입니다.

처음에는 사용자 정의 IComparer MyComparer라는 클래스가 구현되었습니다. 그러나 의도한 수치 비교가 아닌 기본 텍스트 순서에 따라 정렬했기 때문에 정렬 결과가 만족스럽지 못했습니다.

수정된 MyComparer 구현은 다음과 같습니다.

public class MyComparer : IComparer<Object>
{
    public int Compare(Object stringA, Object stringB)
    {
        string[] valueA = stringA.ToString().Split('/');
        string[] valueB = stringB.ToString().Split('/');

        if (valueA.Length != 2 || valueB.Length != 2)
        {
            return stringA.ToString().CompareTo(stringB.ToString());
        }

        // Note: do error checking and consider i18n issues too :)
        if (valueA[0] == valueB[0]) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return int.Parse(valueA[0]).CompareTo(int.Parse(valueB[0]));
        }
    }
}

ApplySortCore MyComparer를 활용하도록 메소드가 수정되었습니다.

case ListSortDirection.Ascending:
    MyComparer comparer = new MyComparer();
    items = items.OrderByDescending(
              x => property.GetValue(x), comparer).ToList();
    break;

마지막으로 정렬된 목록은 바인딩된 목록에 반영되며, 업데이트된 항목 컬렉션은 Items 속성에 할당되어야 합니다:

this.Items = items;

위 내용은 LINQ OrderBy와 함께 사용자 지정 IComparer를 사용하여 목록을 정렬하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.