C#Linq结果ToDictionary帮助

Sim*_*ton 5 c# linq lambda dictionary key-value

我有一个lambda表达式,可以从Dictionary获得结果.

var sortedDict = (from entry in dctMetrics 
                  orderby entry.Value descending 
                  select entry);
Run Code Online (Sandbox Code Playgroud)

表达式拉回了我需要的对,我可以在IDE的调试模式中看到它们.

如何将此转换回与源相同类型的字典?我知道sortedDict的TElement是一个KeyValuePair,但是我无法完全理解ToDictionary扩展方法的语法.我也尝试将var结果分段构造一个新的字典,但无济于事.

有这样的东西(功能明智):

var results = (from entry in dictionary 
               orderby entry.Value descending 
               select entry);
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>);
Run Code Online (Sandbox Code Playgroud)

mqp*_*mqp 15

你可以这样做:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value);
Run Code Online (Sandbox Code Playgroud)

将其读作"对于结果中的每一对,将该元素添加到新字典中,其中密钥将作为该对的密钥生成,并且该值将作为该对的值生成."

此外,仅基于您的示例代码 - 您应该记住a Dictionary<T, U>是作为哈希表实现的,因此它不会维护您放入其中的元素的顺序.如果您需要有序地图,请考虑使用SortedDictionarySortedList代替.