2015-01-23 1 views
-2

트래버스하기 전에 사전을 정렬하려고하면 작동하지 않습니다. 나는 C# 사전이 불변이기 때문에 그것을 믿는가? 이 문제를 해결할만한 방법이 있습니까?C# 사전 정렬

if (arrFilter[i].strTitle.Equals("test")) { 
    arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator()); 
    } else { 
    arrFilter[i].dicValue.OrderBy(j => j.Key, new numComp()); 
} 

foreach (var item in arrFilter[i].dicValue.OrderBy(j => j.Key, new AlphaNumericComparator())) { 
// Traversing stuff 

} 
+0

** 1 ** 코드 스 니펫에 변수 선언 (예 :'arrFilter' 및'strTitle' 및'dicValue' 멤버가 포함 된 유형)을 포함하십시오. ** 2 ** ** "효과가 없다"고 정확히 말하는 것은 무엇입니까? – stakx

답변

4

당신이 사용중인 OrderBy 방법은이 경우에 IEnumerable<KeyValuePair<,>> 반환하는 LINQ 확장 방법이다. 사전을 제자리에서 정렬하지 않으며 정렬 된 사전을 반환하지 않습니다. 사전을 열거하고 정렬 된 열거 형을 반환합니다. 따라서 트래버스 할 때 호출해야합니다 (또는 적어도 트래버스 할 때 반환 값 사용).

또한 사전이 변경 될 수 있습니다 (귀하의 신념에 위배됨). 그러나 주문은 귀하의 통제하에 있지 않습니다. 주문을 제어하려면 SortedDictionary<,>을 사용하는 것이 좋습니다.

+0

매우 소박한 "정렬 된 열거 형 반환"은 "열거 된 경우 정렬 된 항목을 반환하는 열거 형 반환"이어야합니다. 또한 사전에 항목을 추가 할 때'dictionary.OrderBy (...) '결과와 실제 열거 형을 가져 오는 것 사이에 놀랍게도 실패하지 않습니다. –

1

사전목록으로 간단히 변환 할 수 있습니다. 본질적으로 :

// var (List<KeyValuePair<string, string>> 
var container = myDictionary.ToList();  
container.Sort((index, nextIndex) => 
{ 
    return index.Value.CompareTo(nextIndex.Value); 
}); 

정렬 또는 주문을 이미 사전 컬렉션에 포함되지 않습니다 기능을 제공 할 것이다. 잘하면이 도움이됩니다.