2012-08-31 2 views
1

이것이 단일 LINQ에서 수행 될 수 있다고 생각하지만 해결할 수는 없습니다. 다음의 성능은 OK입니다 (큰 목록에서 2 초). 주로 소팅하기 위해 List를 만드는 것에 대한 기억을 피하려고합니다. dlWord21을 두 번째 int 및 첫 번째 int로 정렬하여 반환해야합니다.LINQ 작업을 사용하여 사전 <K, Dictionary <K,V>>을 어떻게 정렬합니까?

List<DocFTSinX> docFTSinXs = new List<DocFTSinX>(); 
foreach (KeyValuePair<int, Dictionary<int, byte>> kvpm in dlWord21) 
{ 
    foreach (KeyValuePair<int, byte> kvps in kvpm.Value) 
    { 
     docFTSinXs.Add(new DocFTSinX(kvps.Key, kvpm.Key, kvps.Value)); 
     //       Word1  Word2 
    } 
} 
dlWord21.Clear(); 
return docFTSinXs.OrderBy(x => x.Word1).ThenBy(x => x.Word2); 
+0

문제는 당신이 위의 @BobVale 소스를 수집하고 그래서 열거 실 거예요 작업 –

+0

을 삭제하고 있기 때문에 어느 시점에서 목록을 작성해야 할 것입니다 작동중인 코드입니다. docFTSinXs가 새롭게 바뀌고 새로운 값을 얻습니다. 그러므로 내 기억이 걱정된다. – Paparazzi

+0

필자가리스트를 작성하는 것을 피한다면, clear() 후에 열거 될 가능성이 있으므로'dlWord21.Clear()'를 호출 할 수 없습니다. 따라서 목록을 만드는 요구 사항. –

답변

2

당신은 사용할 SelectMany :

return dlWord21.SelectMany(o => o.Value, (x, y) => new DocFTSinX(y.Key, x.Key, y.Value)) 
       .OrderBy(x => x.Word1) 
       .ThenBy(x => x.Word2); 
+0

문제는 소스 코드에서'dlWord21.Clear()'일 수 있습니다. –

관련 문제