2011-03-09 5 views
0

매개 변수를 사용하여 정렬 할 목록이 있습니다.두 가지 정렬 규칙이있는 목록을 정렬하는 방법은 무엇입니까?

methods.Sort((y, x) => x.GetChangingMethodsCount().CompareTo(y.GetChangingMethodsCount())); 
      methods.Sort((y, x) => x.GetChangingClassesCount().CompareTo(y.GetChangingClassesCount())); 

먼저 정렬하여 목록 : 즉, 모든 값이며, 예를 들어 내가

A 2/2 
B 3/3 
C 3/4 

이있는 경우 내가 노력

정렬 CBA가 다음과 같은 방법을 구현하는 것을 의미합니다 두 번째 매개 변수를 선택한 다음 첫 번째 매개 변수를 사용하여 다시 정렬하십시오. 그러나 주문은 정확하지 않습니다. 어떤 힌트를 얻는 방법?

+0

정렬 중이므로 코드가 작동하지 않아 다시 정렬됩니다. 당신이 원하는 것은 첫 번째 매개 변수로 정렬하고, CompareTo가 0을 반환하면 (두 번째 매개 변수가 같을 때) 두 번째 매개 변수로 THEN을 처리합니다. 사실 더 긴 함수로 Sort()를 호출 한 것입니다. 또는 답변으로 제공된 확장 방법을 사용하십시오. :) – Tridus

+0

그래, 내가 정렬 응용 프로그램 (예 : 엑셀)이 일종의 정렬 작동이 붙어있는 것 같아요) –

답변

4

두 가지 정렬 키를 단일 기능으로 결합해야합니다. 첫 번째 비교에서 0이 반환되면 두 번째 시도 만 수행하십시오.

methods.Sort((y, x) => 
{ 
    int sort = x.GetChangingClassesCount().CompareTo(y.GetChangingClassesCount()); 
    if (sort == 0) 
     sort = x.GetChangingMethodsCount().CompareTo(y.GetChangingMethodsCount()); 
    return sort; 
}); 
+0

고마워요 정확히 내가 뭘 찾고 있었는지 것 같습니다 에 대한. – RoflcoptrException

3

아마 가장 쉬운 방법은 그와 같은 OrderByThenBy 확장 방법을 사용하는 것입니다 : 이것은 당신이 당신의 예에 따라 원하는 경우 (적어도 나에게)

methods.OrderByDescending(x => x.GetChangingMethodCount()). 
     ThenByDescending(x => x.GetChangingClassesCount()). 
     ToList(); 
+0

고마워,하지만 난 정말 정확한 결과를 얻을 수 없어요 – RoflcoptrException

2

그것은 분명하지 않다,하지만 당신은 할 수 이것을 시도해보십시오 :

var sortedMethods = methods.OrderByDescending(m => m.GetChangingMethodsCount()).ThenByDescending(m => m.GetChangingClassesCount()); 
관련 문제