programing

여러 필드별로 목록(C#)을 주문하시겠습니까?

newnotes 2023. 4. 10. 22:15
반응형

여러 필드별로 목록(C#)을 주문하시겠습니까?

C#의 오브젝트 리스트를 1개뿐만 아니라 여러 필드별로 주문하고 싶습니다.예를 들어 A와 B의 2개의 Atribute를 가진 X라는 클래스가 있고 다음 오브젝트가 그 순서로 있다고 가정합니다.

object1 = > A = "a", B = "h"
object2 = > A = "a", B = "c"
object3 = > A = "b", B = "x"
object4 = > A = "b", B = "b"

먼저 A Atribute를 기준으로 목록을 정렬하고, 그것들이 같을 때 B 요소를 기준으로 정렬합니다.그러면 순서는 다음과 같습니다.

"a" "c"
"a" "h"
"b" "b"
"b" "x"

제가 알기로는 OrderBy 메서드는 하나의 파라미터로 오더합니다.

질문:여러 필드를 기준으로 C# 목록을 주문하려면 어떻게 해야 합니까?

사용하다ThenBy:

var orderedCustomers = Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)

MSDN:http://msdn.microsoft.com/en-us/library/bb549422.aspx 를 참조

네, 비교 방법을 지정하여 할 수 있습니다.장점은 정렬된 개체가 IC를 비교할 수 없다는 것입니다.

   aListOfObjects.Sort((x, y) =>
   {
       int result = x.A.CompareTo(y.A);
       return result != 0 ? result : x.B.CompareTo(y.B);
   });

오브젝트를 다음과 같이 만듭니다.

public class MyObject : IComparable
{
    public string a;
    public string b;

    virtual public int CompareTo(object obj)
    {
        if (obj is MyObject)
        {
            var compareObj = (MyObject)obj;
            if (this.a.CompareTo(compareObj.a) == 0)
            {
                // compare second value
                return this.b.CompareTo(compareObj.b);
            }
            return this.a.CompareTo(compareObj.b);
        }
        else
        {
            throw new ArgumentException("Object is not a MyObject ");
        }
    }
}

또한 Compare에 대한 반환은수신인:

http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx

그런 다음 My Object 목록이 있으면 에 문의하십시오.정렬()

var objList = new List<MyObject>();
objList.Sort();

오브젝트는 IComarbable 인터페이스를 구현해야 합니다.

이것으로 당신의 클래스는 새로운 기능이 됩니다.CompareTo(T other)이 함수에서는 현재 개체와 다른 개체를 비교하여 첫 번째 개체가 두 번째 개체보다 크거나 작거나 같은 정수 값을 반환할 수 있습니다.

언급URL : https://stackoverflow.com/questions/2779375/order-a-list-c-by-many-fields

반응형