Вопрос

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

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 вместо этого, если вам нужна упорядоченная карта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top