Справка C# Linq Result ToDictionary

У меня есть лямбда-выражение, которое получает результаты из словаря.

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>);

person Simpleton    schedule 28.12.2009    source источник
comment
Синтаксис лямбда имеет вид t => Func<T, T1, T2, ...>. См. Ответ mquander - r => r.Key и r => r.Value - это лямбда-выражения. Не путайте их с выражениями запроса (from x in y select x).   -  person Aaronaught    schedule 28.12.2009


Ответы (1)


Вы можете сделать это следующим образом:

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

Прочитайте это как «для каждой пары в результатах добавьте этот элемент в новый словарь, где ключ будет создан как ключ пары, а значение будет создано как значение пары».

Кроме того, просто основываясь на вашем примере кода - вы должны иметь в виду, что Dictionary<T, U> реализован как хэш-таблица, поэтому он не будет поддерживать порядок элементов, которые вы в него помещаете. Рассмотрите возможность использования SortedDictionary или SortedList, если вам нужна упорядоченная карта.

person mqp    schedule 28.12.2009
comment
Лол, мне нравится, насколько сложным становится мой код, а затем 5 секунд на SO, и это 1/10 размера.... так просто - person dave heywood; 30.06.2013
comment
ключ не отображается после ввода r. - person Viku; 14.10.2013