Справка по C# Linq Result ToDictionary
-
21-09-2019 - |
Вопрос
У меня есть лямбда-выражение, которое получает результаты из словаря.
var sortedDict = (from entry in dctMetrics
orderby entry.Value descending
select entry);
Выражение извлекает нужные мне пары, я вижу их в режиме отладки IDE.
Как мне преобразовать это обратно в словарь того же типа, что и исходный?Я знаю, что TElement sortedDict — это 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>);
Решение
Вы можете сделать это следующим образом:
var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);
Прочтите это как «для каждой пары результатов добавьте этот элемент в новый словарь, где ключ будет создан как ключ пары, а значение будет создано как значение пары».
Кроме того, просто основываясь на вашем примере кода, вы должны иметь в виду, что Dictionary<T, U>
реализован как хеш-таблица, поэтому он не будет поддерживать порядок элементов, которые вы в него поместили.Рассмотрите возможность использования SortedDictionary
или SortedList
вместо этого, если вам нужна упорядоченная карта.