我有
private static void outputDictionaryContentsByDescending(Dictionary<string, int> list)
{
foreach (KeyValuePair<string, int> pair in list.OrderByDescending(key => key.Value))
{
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}
}
所以它输出每个字符串,它的整数值按降序排列但只想输出前20个。我无法弄清楚如何做到这一点,我虽然使用数组但不知道如何将字典中的值放入数组中。
答案 0 :(得分:3)
如果您想要的只是list.OrderByDescending(key => key.Value)
中的前20个项目,那么您想要的是查看IEnumerable<T> extension methods。你想要的具体是Take()。但总的来说,您需要熟悉这些方法,因为它们构成了查询对象和数据的强大基础。
此外,将这些方法链接在一起时要注意的一个非常重要的事情是它们被调用的顺序。每个电话都附加到最后一个。 (查看expression trees,不要被它吓倒,因为它是非常深入的主题,即使最好的开发人员也需要时间和经验来掌握。)例如,在你的情况下,你想要OrderByDescending
然后Take
,但绝对不是相反。如果你以相反的方式做到这一点,你首先按照他们目前所处的随机顺序排在前20位,然后订购那些,这将产生不同的输出。
答案 1 :(得分:1)
使用.Take
:
list.OrderByDescending(key => key.Value).Take(20)
答案 2 :(得分:0)
您可以使用Take(20)
执行此操作:
private static void outputDictionaryContentsByDescending(Dictionary<string, int> dictionary)
{
foreach (var pair in dictionary.OrderByDescending(key => key.Value).Take(20))
{
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}
}
答案 3 :(得分:0)
list.OrderByDescending(key => key.Value).Take(20)
答案 4 :(得分:-1)
我只是想抛弃你不应该挂断“最好的方式”,因为这种挂断 - 特别是在学习时 - 会导致分析瘫痪。
上面的答案非常好并且是“正确的”答案,但我想提供一些观点。我打算写一些以你所拥有的代码开头的东西,并且不妥协地回答你的问题,但不过要回答它。我将这样做来说明这一点:
有时候,最好以你所知道的方式做某事,你有信心工作而不是试图找到“最好的方式”。如果你有时间通过各种方式探索“最好”。你应该不时地为了变得更好。
但不要挂断它。如果你写了这个并且它有效,它在大多数情况下会“通过集合”:
private static void outputDictionaryContentsByDescending(Dictionary<string, int> list)
{
int iHowMany = 20;
foreach (KeyValuePair<string, int> pair in list.OrderByDescending(key => key.Value))
{
if(iHowMany-- > 0)
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}
}
最佳代码?否。
作品?是。
对于你作为程序员来说,你做的很多,这就够了。在未来的2年,3年后,您可能会在代码审查期间阅读它并感到畏缩,但它有效,您会更好,如果您想更新它,那么您可能会更有能力。