2012-04-21 49 views
5

我有排序像这样的词典:如何从.NET字典中选择前10名?

var sortedDict = (from entry in dd 
        orderby entry.Value descending select entry 
       ).ToDictionary(pair => pair.Key, pair => pair.Value); 

我怎样才能选择此有序字典前10名?

+2

提高接受率。接受帮助你解决问题并增加知识的答案 – 2012-04-21 06:04:05

回答

5

由于您订购的字典descending,然后Take荷兰国际集团前10个结果会选择TOP 10:

var sortedDict = (from entry in dd 
        orderby entry.Value descending 
        select entry 
       ).Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value); 
+0

非常感谢,非常感谢 – Dedar 2012-04-21 06:05:12

21

你提到在您的查询降,我认为你需要最后10个OCCURENCES。如果是这样

var sortedDict = (from entry in dd orderby entry.Value descending select entry) 
        .Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value) ; 


    var sortedDict = dd.OrderByDescending(entry=>entry.Value) 
        .Take(10) 
        .ToDictionary(pair=>pair.Key,pair=>pair.Value); 

如果你需要第10位,只是删除descending,它会正常工作。

var sortedDict = (from entry in dd orderby entry.Value select entry) 
        .Take(10) 
        .ToDictionary(pair => pair.Key, pair => pair.Value) ; 


var sortedDict = dd.OrderBy(entry=>entry.Value) 
        .Take(10) 
        .ToDictionary(pair=>pair.Key,pair=>pair.Value); 
+0

非常感谢。它是非常好的工作 – Dedar 2012-04-21 06:04:21

+4

@Dedar [请接受它作为答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)如果它是有用的。 – Marshal 2012-04-21 06:05:39

1

您需要使用Take()方法:

var sortedDict = (
    from entry in dd 
    orderby entry.Value descending 
    select entry) 
    .Take(10) 
    .ToDictionary(pair => pair.Key, pair => pair.Value); 
1
var sortedDict = (from entry in dd orderby entry.Value descending select entry) 
       .Take(10).ToDictionary(pair => pair.Key, pair => pair.Value); 

,如果你把10首这样会更有效率,然后将它们转换成字典。在反之亦然的情况下,它会将它们全部转换为字典,然后从中取出10个。如果我们有一个大的列表可供选择,这将影响效率。

+0

非常感谢 – Dedar 2012-04-22 03:30:10