2014-05-15 4 views
2

나는 SortedDictionary의 컬렉션이 있습니다. 순으로

나는
_variableValues.OrderBy(key => key.Key); 

를 사용하여이 작업을 수행하려고하지만 내 문제는 그 결과가 있다는 것입니다 :

ThkPost_Point1 15 
ThkPost_Point11 8 
ThkPost_Point15 5 
ThkPost_Point2 7 
ThkPost_Point20 1 
ThkPost_Point22 1 

하지만 메신저를 찾는 것은 일종의이 같은 결과를 달성 할 수있는 솔루션입니다 :

ThkPost_Point1 15 
ThkPost_Point2 7 
ThkPost_Point11 8 
ThkPost_Point15 5 
ThkPost_Point20 1 
ThkPost_Point22 1 

SortedDictionary을 사용하여 이러한 방식으로 데이터를 정렬 할 수있는 방법이 있습니까?

편집 :

나는 바부과 metacubed의 힌트를 구현하기 위해 노력했다.

그래서 다음과 같은 방법

static void Main(string[] args) 
    { 
     SortedDictionary<string, string> _varVal = new SortedDictionary<string, string>(StringComparer.OrdinalIgnoreCase); 

     _varVal.Add("Variable1", "Value1"); 
     _varVal.Add("Variable2", "Value2"); 
     _varVal.Add("Variable3", "Value3"); 
     _varVal.Add("Variable4", "Value4"); 
     _varVal.Add("Variable5", "Value5"); 

     _varVal.Add("Variable10", "Value10"); 
     _varVal.Add("Variable11", "Value11"); 
     _varVal.Add("Variable12", "Value12"); 
     _varVal.Add("Variable13", "Value13"); 
     _varVal.Add("Variable14", "Value14"); 

     _varVal.Add("Variable20", "Value20"); 
     _varVal.Add("Variable22", "Value21"); 
     _varVal.Add("Variable23", "Value22"); 
     _varVal.Add("Variable24", "Value23"); 
     _varVal.Add("Variable25", "Value24"); 

     foreach (KeyValuePair<string, string> kvp in _varVal) 
     { 
      Console.WriteLine(kvp.Key,kvp.Value); 
      Debug.WriteLine(kvp.Key +" "+ kvp.Value); 
     } 

     Application.Run(); 
    } 

에서 그것을 impelented 그러나 결과는 다음과 같이 여전히 :

Variable1 Value1 
    Variable10 Value10 
    Variable11 Value11 
    Variable12 Value12 
    Variable13 Value13 
    Variable14 Value14 
    Variable2 Value2 
    Variable20 Value20 
    Variable22 Value21 
    Variable23 Value22 
    Variable24 Value23 
    Variable25 Value24 
    Variable3 Value3 
    Variable4 Value4 
    Variable5 Value5 

내가 놓친 게 있나?

+0

내 편집을 참조하십시오. 훨씬 더 복잡하지만 모든 시나리오에서 예상대로 작동합니다. – metacubed

+0

같은 문제가있는 사람들에게만 해당됩니다. 제 경우에는 매력처럼 작동하는 두 번째 대안 솔루션을 발견했습니다. http://www.codeproject.com/Articles/11016/Numeric-String-Sort-in-C – ck84vi

답변

2

참고 : 이전 답변으로 문제가 올바르게 해결되지 않았기 때문에 수정합니다.

당신이 찾고있는 것을 "자연 순서"정렬이라고합니다. 이전 솔루션보다 올바르게 수행하는 것이 훨씬 더 복잡합니다. 즉, 문자열 키를 숫자와 텍스트 부분으로 나눈 다음 각 부분을 순서대로 정렬해야합니다. 파트가 숫자와 같은 경우 숫자와 같이 정렬하십시오. 그렇지 않으면 문자열로 정렬하십시오.

가능한 구현에 대해이 블로그 게시물 Natural Sort Compare with Linq OrderBy을 참조하십시오. 원본 소스는 here입니다.

+0

감사합니다. 정확히 내가 무엇을 찾고 있었는지. 나는 그것이 프레임 워크의 일부가 될 것이라고 생각했다. 하지만이 솔루션은 내 문제를 해결합니다. – ck84vi