2009-12-28 84 views
5

我有一個lambda表達式從Dictionary獲取結果。C#Linq結果ToDictionary幫助

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

表達式拉回我需要的對,我可以在IDE的調試模式下看到它們。

我該如何將它轉換回與源相同類型的字典?我知道sortedDict的TElement是一個KeyValuePair,但我無法完全理解ToDictionary擴展方法的語法。我也嘗試foreach'var結果分段構造一個新的字典,但無濟於事。

有沒有這樣的事情(功能方面):

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

Lambda語法的形式爲't => Func '。請參閱mquander的回答 - 'r => r.Key'和'r => r.Value'是lambda。不要將這些與查詢表達式混淆('from x in y select x')。 – Aaronaught

回答

15

你可以這樣說:

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

瞭解,作爲「爲每對結果,即元素添加到新字典,其中密鑰將作爲密鑰對生成,並且該值將作爲該對的值生成。「

此外,只是基於您的示例代碼 - 您應該記住Dictionary<T, U>是作爲散列表實現的,因此它不會維護您放入它的元素的順序。如果您需要有序地圖,請考慮使用SortedDictionarySortedList

+0

非常感謝!解決了我的困境! – Simpleton

+0

大聲笑,我喜歡我的代碼有多複雜,然後在5秒鐘,這是大小的1/10 ....很簡單 –

+0

鍵是鍵入r後沒有列出。 – Kenta