字典获得最顶层的元素

时间:2014-04-09 08:58:15

标签: c# dictionary

朋友我创建了一本字典。为了获得我在代码下面使用的前2个元素。

topKeys[B] = (from entry in differentKeys orderby entry.Value descending 
             select entry)
                .ToDictionary(pair => pair.Key, pair => pair.Value).Take(2)
                .ToDictionary(x=>x.Key,x=>x.Value).Values.ToArray();

但似乎没有用。你能否在C#中建议哪一行能让我回到最高2位? differentKeys是我的字典的名称。检查下面的按扣......

enter image description here enter image description here

3 个答案:

答案 0 :(得分:3)

目前尚不清楚为什么要一直转换为词典。条目Dictionary<,>的顺序无法保证。

看起来你只是想要:

var topValues = differentKeys.Values
                             .OrderByDescending(x => x)
                             .Take(2)
                             .ToArray();

或者,如果您想要与顶部值对应的键:

var keysForTopValues = differentKeys.OrderByDescending(x => x.Value)
                                    .Select(x => x.Key)
                                    .Take(2)
                                    .ToArray();

答案 1 :(得分:1)

不确定您的预期输出和实际输出是多少,但您似乎想要从词典中获得前2名。

Dictionary<string, string> sample = new Dictionary<string, string>();
sample.Add("First", "Yasser");
sample.Add("Second", "Amit");
sample.Add("Third", "Sachin");
sample.Add("Fourth", "Kunal");

Dictionary<string, string> top2 = sample.Take(2).ToDictionary(m => m.Key, m => m.Value);

更新:刚刚注意到您的代码中使用了“降序”。

如果你想对按键使用这个

进行排序
sample.OrderByDescending(m => m.Key).Take(2)

答案 2 :(得分:0)

你不应该一直转换成词典,differentKeys到底是什么类型的?我在这里假设它是某种IEnumerable<T>。如果differentKeysIDictionary<K,V>,请使用Jon的答案,即使用Values属性进行值集合,而不是通过Linq选择它们。

topKeys[B] = (from entry in differentKeys orderby entry.Value descending 
              select entry.Value)
              .Take(2)
              .ToArray();