排序和计算字符串的最佳方法?

时间:2014-02-27 04:54:13

标签: c#

我有一段时间没有接触过C#.NET所以我对此非常生疏。我有一个问题,希望有人可以在这里回答。

我有一个接受字符串输入的程序。我的目标是每隔XX秒运行一次私有函数,它将输入并将它们排序到最常用的字符串中,返回最常用的字,然后擦除输入以准备下一批。

例如,如果程序要求喜欢的颜色,并且10个用户输入“RED”“BLUE”“RED”“ORANGE”“PINK”“ORANGE”“RED”“BLUE”“GREEN”“BLACK”等内容“我希望该功能首先查看并发现RED被说了3次(因此应该返回RED)。

但是对于我的生活,我的大脑让我失望了。我很确定我需要一些somekind数组,但我不记得如何根据该数组中字符串的出现来对其进行排序。

Psuedo代码明智,我想我需要像

这样的东西

数组[word,counter]

如果(单词已经存在)计数器++ else(添加单词,将计数器设置为1)

然后按计数器排序。

但是,如何将其实际实现为C#... welp ...

我知道这是一个愚蠢的问题,但谷歌正在回归一堆过于复杂或完全不相关的事情。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

您可以使用LINQ GroupBy,按降序排序并抓住第一项:

var list = new List<string>() {"RED", "BLUE", "RED", "ORANGE", "PINK", "ORANGE", "RED", "BLUE", "GREEN", "BLACK"};

Console.WriteLine(list.GroupBy(x => x)
                      .OrderByDescending(x => x.Count())
                      .First().Key); // RED

答案 1 :(得分:0)

执行以下操作来存储颜色:

List<string> colors = new List<string>();

然后做这样的事情来阅读它们:

colors.Add(Console.ReadLine());

然后使用这样的函数来确定哪种颜色最常见:

private string GetMostCommonColor ()
{
    return (from i in list
           group i by i into grp
         orderby grp.Count() descending
          select grp.Key).First();
}

有关详细信息,请参阅this StackOverflow question