>백엔드 개발 >C++ >사용자 지정 IComparer를 사용하여 LINQ OrderBy에서 개체를 올바르게 정렬하려면 어떻게 해야 합니까?

사용자 지정 IComparer를 사용하여 LINQ OrderBy에서 개체를 올바르게 정렬하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-02 17:44:08700검색

How Can I Use a Custom IComparer to Correctly Sort Objects in LINQ OrderBy?

사용자 정의 IComparer 사용 for Linq OrderBy

문제:

특정 문자열 형식(예: 200906/1)의 송장 번호를 포함하는 속성이 있는 개체 목록이 있습니다. C#에서 Linq OrderBy의 기본 정렬로 인해 200906/1, 200906/10, 200906/11과 같은 바람직하지 않은 정렬 순서가 발생합니다.

해결책:

To 자신만의 사용자 정의 정렬 순서를 구현하면 IComparer 인터페이스 구현. 샘플 구현은 다음과 같습니다.

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());
        }

        // Parse numbers for comparison
        int numA = int.Parse(valueA[0]);
        int numB = int.Parse(valueB[0]);
        if (numA == numB) 
        {
            return int.Parse(valueA[1]).CompareTo(int.Parse(valueB[1]));
        }
        else
        {
            return numA.CompareTo(numB);
        }
    }
}

원본 코드에서는 다음과 같이 Linq OrderBy에서 MyComparer를 사용하려고 했습니다.

items = items.OrderByDescending(
  x => property.GetValue(x), comparer).ToList();

이 접근 방식은 올바르지 않습니다. 비교자를 사용하기 위한 올바른 구문은 다음과 같습니다.

items = items.OrderBy(x => property.GetValue(x), comparer).ToList();

오름차순으로 정렬하려는 경우 OrderByDescending 대신 OrderBy 메서드가 사용된다는 점에 유의하세요.

마지막으로 다음을 잊지 마세요. UI의 변경 사항을 반영하려면 정렬된 항목을 데이터 소스에 다시 할당하세요.

this.Items = items;

위 내용은 사용자 지정 IComparer를 사용하여 LINQ OrderBy에서 개체를 올바르게 정렬하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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