2009-12-28 2 views
5

사전에서 결과를 얻는 람다식이 있습니다.C# Linq 결과 ToDictionary 도움말

var sortedDict = (from entry in dctMetrics 
        orderby entry.Value descending 
        select entry); 

식이 내가 필요로하는 쌍을 되찾았으므로 IDE의 디버그 모드에서 볼 수 있습니다.

원본과 동일한 유형의 사전으로 변환하려면 어떻게해야합니까? sortedDict의 TElement는 KeyValuePair이지만 ToDictionary 확장 메서드의 구문을 완전히 이해하는 데 문제가 있습니다. 나는 또한 varach 결과를 foreach'ing하여 조각으로 새로운 사전을 만들지 만, 아무 소용이 없다.

var results = (from entry in dictionary 
       orderby entry.Value descending 
       select entry); 
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>); 
+0

람다 구문의 형식은't => Func '입니다. mquander의 대답을보십시오 -'r => r.Key' 그리고'r => r.Value'는 람다입니다. 이들을 쿼리 표현식과 혼동하지 마십시오 ('from x in y select x'). – Aaronaught

답변

15

당신은 이런 식으로 작업을 수행 할 수 있습니다 :

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value); 

"로 결과에서 각 쌍의 해당 요소를 추가하는 것이 읽기

이 (현명한 기능)과 같은 것이 있습니다 새 사전, 키가 쌍의 키로 생성되며 값은 쌍의 값으로 생성됩니다. "

또한 샘플 코드를 기반으로 - Dictionary<T, U>은 해시 테이블로 구현되므로 입력 한 요소의 순서는 유지되지 않습니다. 순서가 지정된지도가 필요한 경우 대신 SortedDictionary 또는 SortedList을 사용하는 것이 좋습니다.

+0

감사합니다. 나의 불황을 해결했다! – Simpleton

+0

Lol, 내 코드가 얼마나 복잡해 졌는지, 그리고 나서 5 초가 남았고 크기의 1/10 정도입니다. 그래서 간단히 –

+0

키를 입력하면 r이 입력되지 않습니다. – Kenta