C#在字符串列表中查找最多出现的值

时间:2016-02-07 18:44:03

标签: c# linq

我的列表非常简单,如

List<string> mostFrequent = new List<string>()
{
   "Hot",
   "Sunny",
   "Windy",
   "Sunny",
   "Rainy"
}

如果我想在列表中找到最常出现的值,请使用以下代码。

var groupsWithCounts = from s in mostFrequent
group s by s into g
select new { 
    Item = g.Key, 
    Count = g.Count()
};

var groupsSorted = groupsWithCounts.OrderByDescending(g => g.Count);
string mostFrequest = groupsSorted.First().Item;

使用它,我在mostFrequent变量中得到最频繁的值(Sunny)。但是如果此List的项为null两次,则它变为null。比如在这种情况下

List<string> mostFrequent = new List<string>()
{
   null,
   "Sunny",
   null,
   "Sunny",
   "Rainy"
}

我仍然希望将最常见的价值视为Sunny。但它变得无效。知道如何在上面的列表中获得最频繁的项目?

3 个答案:

答案 0 :(得分:2)

var notnull = mostFrequent.Where(f=>f!=null);

这将删除所有空值

答案 1 :(得分:2)

您可以使用以下方式获取最频繁的项目

var item = mostFrequent.Where(c => !string.IsNullOrEmpty(c)).GroupBy(a => a).OrderByDescending(b => b.Key[1].ToString()).First().Key;

答案 2 :(得分:0)

抱歉:)没有读过它。 这是awnser。

var most = (from i in mostFrequent
                     where i != null
                    group i by i into grp
                    orderby grp.Count() descending
                    select grp.Key).First();

或者像这样的其他方式:

var most = mostFrequent.GroupBy(i => i).OrderByDescending(grp => grp.Count()).Select(grp => grp.Key).Where(x => x != null).First();