여러 필드별로 목록(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
'programing' 카테고리의 다른 글
| Excel VBA를 사용하여 문자열을 효율적으로 인코딩하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
|---|---|
| git 추적에서 폴더 제거 (0) | 2023.04.10 |
| Python에서 상대적인 Import는 어떻게 해야 하나요? (0) | 2023.04.10 |
| UIImage 문자열과 Base64 문자열 간 변환 (0) | 2023.04.10 |
| WPF에서 모달 대화 상자를 만드는 방법 (0) | 2023.04.10 |