여러 필드로 목록 (C #)을 주문 하시겠습니까? [복제]
이 질문에 이미 답변이 있습니다.
- LINQ를 사용한 Multiple Order By [중복] 1 개의 답변
C #에서 개체 목록을 하나가 아닌 여러 필드로 정렬하고 싶습니다. 예를 들어, A와 B라는 두 개의 속성이있는 X라는 클래스가 있고 그 순서대로 다음 객체가 있다고 가정 해 보겠습니다.
object1 => A = "a", B = "h"
object2 => A = "a", B = "c"
object3 => A = "b", B = "x"
object4 => A = "b" , B = "b"
먼저 A 속성별로 목록을 정렬하고 같을 때 B 요소별로 순서를 지정하고 싶습니다. 순서는 다음과 같습니다.
"a" "c"
"a" "h"
"b" "b"
"b" "x"
내가 아는 한 OrderBy 메서드는 하나의 매개 변수로 정렬합니다.
질문 : 둘 이상의 필드로 C # 목록을 주문하려면 어떻게해야합니까?
감사합니다
사용 ThenBy
:
Customer.OrderBy(c => c.LastName).ThenBy(c => c.FirstName)
MSDN 참조 : http://msdn.microsoft.com/en-us/library/bb549422.aspx
예, 비교 방법을 지정하여 수행 할 수 있습니다. 장점은 정렬 된 개체가 IComparable 일 필요가 없다는 것입니다.
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 ");
}
}
}
또한 CompareTo의 반환 값에 유의하십시오.
http://msdn.microsoft.com/en-us/library/system.icomparable.compareto.aspx
그런 다음 MyObject 목록이 있으면 .Sort ()를 호출하십시오.
var objList = new List<MyObject>();
objList.Sort();
개체는 IComparable 인터페이스를 구현해야합니다 .
With it your class becomes a new function called CompareTo(T other)
. Within this function you can make any comparison between the current and the other object and return an integer value about if the first is greater, smaller or equal to the second one.
참고URL : https://stackoverflow.com/questions/2779375/order-a-list-c-by-many-fields
'developer tip' 카테고리의 다른 글
Ruby 1.9에서 디버깅 (0) | 2020.09.04 |
---|---|
webClient.DownloadFile ()에 대한 시간 제한 설정 (0) | 2020.09.04 |
jQuery로 전화 번호를 포맷하는 방법 (0) | 2020.09.04 |
신속하게 현재 시간에 분을 추가하는 방법 (0) | 2020.09.04 |
JavaScript로 배열을 쉽게 자르는 방법은 무엇입니까? (0) | 2020.09.04 |