2013-01-09 7 views
1

그래서 myNumber라는 속성이 포함 된 클래스가 있습니다. 그것은 다음과 같습니다 myNumber에 포함숫자 문자열 값 속성으로 개체 컬렉션을 정렬하는 중 문제가 발생했습니다.

public class MyThing 
{ 
    public int name{ get; set; } 
    public string myNumber{ get; set; } 
} 

값은 12-24 또는 12-024과 같이 할 수 있습니다.

myNumber 내림차순으로 이러한 개체 (IEnumerable<MyThing> myCollection)의 컬렉션을 주문하고 싶습니다. 그러나이 작업을 수행하는 방법을 잘 모르겠습니다.

나는 myCollection.OrderByDescending(f => f.myNumber)을 시도했지만 그게 내가 기대했던 것이 아니다. 나는이 같은 주문 12-22, 13-01, 12-030을 기대 :

13-01 
12-030 
12-22 
+1

문자열의 처음 두 문자부터 순서대로 숫자를 정렬 하시겠습니까? 아니면 패턴이 그보다 더 복잡합니까? – MarcinJuraszek

+1

12-230이 12-22보다 큰 이유는 무엇입니까? –

+0

당신이 규칙을 분류하는 방법에 대해 좀 더 분명히해야합니다. 마치 숫자가없는 순서처럼 숫자 순서대로 표시해야합니까? –

답변

2

Version처럼 주문할 수있다. 따라서 당신은 '-'에 의해 분할 소령 -으로 첫 번째 부분과 부 버전과 마지막 부분 사용할 수 있습니다 원하는 결과

var orderedLikeVersion = myCollection 
    .Select(t => new 
    { 
     Thing = t, 
     Parts = t.myNumber.Split('-') 
    }).Select(x => new 
    { 
     x.Thing, 
     Version = new Version(int.Parse(x.Parts[0]), int.Parse(x.Parts[1])) 
    }) 
    .OrderByDescending(x => x.Version) 
    .Select(x => x.Thing); 

Demo합니다.

+0

그게 훌륭합니다. 매력처럼 일했습니다. –

0

난 당신이 순서를 가지고 같은데요?

13-01 
12-22 
12-030 

이것은 알파벳 표기 규칙에 따라 정확합니다. 12-2 *보다 크다 12-0 * (22)가 03 이상도 크기 때문에 그것은 또한 이 숫자 규칙에 의해 올바른 것, 그리고 (2)가 0보다 큰

은 0

후이 온다부터 따라서 예상 주문에서 확신 할 수 없는데 왜 12-030을 12-22보다 큰 것으로 해석합니까? 하이픈 뒤에 선행 0이 잘 리도록 허용 된 부분이 있습니까? 네가 그렇게했다면 12-30은 12-030과 같을 것이고, 나는 지도력 0의 목적이 무엇인지 스스로에게 물을 것이다.

+0

예. 당신이 올바른지. 대시 오른쪽에있는 자릿수의 앞자리 0이 순서를 벗어납니다. 사람들은 맞춤식 번호를 입력 할 수 있으며 데이터가 어떻게 이런 식으로 끝났는지 추측합니다. 나는 들어가서 이것을 청소하려고 할 수 있다고 생각하지만, 시스템이 12-030과 12-30을 동일한 숫자 임에도 불구하고 다른 숫자로 보는 것이 두려웠습니다. –

관련 문제