C# 如何从字典中输出前20个字符串<;字符串,int>;哪个按降序排列?(理工科一年级学生)

C# 如何从字典中输出前20个字符串<;字符串,int>;哪个按降序排列?(理工科一年级学生),c#,C#,我有 private static void outputDictionaryContentsByDescending(字典列表) { foreach(list.OrderByDescending中的KeyValuePair对(key=>key.Value)) { WriteLine(“{0},{1}”,pair.Key,pair.Value); } } 因此,它以降序输出每个字符串及其整数值,但只想输出前20位。我不知道该怎么做,我曾想过使用数组,但不知道如何将字典中的值放入数组。使用.Ta

我有

private static void outputDictionaryContentsByDescending(字典列表)
{
foreach(list.OrderByDescending中的KeyValuePair对(key=>key.Value))
{
WriteLine(“{0},{1}”,pair.Key,pair.Value);
}
}

因此,它以降序输出每个字符串及其整数值,但只想输出前20位。我不知道该怎么做,我曾想过使用数组,但不知道如何将字典中的值放入数组。

使用
.Take

    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);
        }
    }
您可以使用来执行此操作:

list.OrderByDescending(key => key.Value).Take(20)
私有静态void outputDictionaryContentsByDescending(字典字典)
{
foreach(dictionary.OrderByDescending(key=>key.Value.Take(20))中的var对)
{
WriteLine(“{0},{1}”,pair.Key,pair.Value);
}
}

如果您只需要
list.OrderByDescending(key=>key.Value)
中的前20项,那么您只需要查看。你想要的具体是。但一般来说,您需要熟悉这些方法,因为它们为查询对象和数据提供了非常强大的基础


此外,将这些方法链接在一起时,需要注意的一件非常重要的事情是调用它们的顺序。每个调用都附加到最后一个调用。(向上看,不要被它吓倒,因为这是一个非常深入的主题,即使是最优秀的开发人员也需要时间和经验来掌握。)因此,例如,在您的案例中,您希望
按降序
,然后
接受
,但绝对不是相反的方式。如果你用另一种方法来做,你应该先按照前20名的随机顺序来排序,然后再排序,这将产生不同的输出。

我只想指出,你不应该被“最好的方法是什么”挂断,因为挂断会导致分析瘫痪,特别是在学习时

上面的答案非常好,而且是“正确”的答案,但我只想提供一点观点。我将要写一些东西,从你的代码开始,不雅观地回答你的问题,但仍然回答它。我将用它来说明这一点:

有时候,最好是用你知道的、你有信心会奏效的方式去做某件事,而不是试图找到“最好的方式”。如果你有时间去探索“最好的”,那就千方百计去探索。为了变得更好,你应该时常这样做

但是不要挂断了。如果你写了这篇文章,并且成功了,那么在大多数情况下,它会“通过测试”:

private static void outputDictionaryContentsByDescending(字典列表)
{
int iHowMany=20;
foreach(list.OrderByDescending中的KeyValuePair对(key=>key.Value))
{
如果(i有多个-->0)
WriteLine(“{0},{1}”,pair.Key,pair.Value);
}
}
最佳代码?没有

工作?对


作为一名程序员,你要做的事情已经足够了。在未来的两三年里,你可能会在代码审查时阅读它并畏缩,但它起了作用,你会更好,如果你想更新它,你可能会更有能力。

list.OrderByDescending(key=>key.Value)。以(20)你的导师教给你的字典、Linq、lambda表达式等知识为例。,但是,相比之下,计数器之类的想法并不是微不足道的。来吧,人们,不要只在家庭作业标记的问题上留下简单的代码答案。将OP指向正确的方向,但不要为他/她做工作:)我可以问一下你要去哪所学校吗?我认为在你完成后休息会更好,所以:
如果(我有很多--==0)休息else Console.WriteLine…
做很多事情会更好。以我目前的专业水平,我不会写上面的代码——我会使用其他答案中已经解释过的.Take方法。但我想说明上述观点,所以我特意编写了一些代码,这些代码会让大多数经验丰富的专业人士感到畏缩。我这样做是因为我记得我学习的时候知道我做的是“错误的”,但能得到结果更重要。一旦你做了足够多的“得到结果”,你就可以开始一次一个地“做对”。
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);
    }
}
list.OrderByDescending(key => key.Value).Take(20)
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);
    }
}