2009-12-28 2 views
5

У меня есть выражение лямбда, которое получает результаты из Словаря.C# Linq Результат ToDictionary Help

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

Выражение возвращает пары, в которых я нуждаюсь, я могу видеть их в режиме отладки IDE.

Как мне вернуть обратно словарь того же типа, что и источник? Я знаю, что TElement sortedDict является KeyValuePair, но мне трудно понять синтаксис метода расширения ToDictionary. Я также попытался заставить результат 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' - lambdas. Не путайте их с выражениями запроса ('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 секунд на SO и это 1/10-й размер .... так просто –

+0

ключ не отображается после ввода r. – Kenta