返回列表中的最大重复项

时间:2013-03-03 10:13:38

标签: c# linq list count max

        List<string> prod = new List<string>();
        prod.Add("dfg");
        prod.Add("dfg");
        prod.Add("ojj");
        prod.Add("dfg");
        prod.Add("e");

在上面的代码中,prod List中的项目“dfg”重复了三次(最大计数)... 我希望“dfg”作为输出,因为此项目重复最多次。 任何人都可以帮助

2 个答案:

答案 0 :(得分:26)

不是绝对最有效的,但它有效:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .OrderByDescending(x => x.Count())
                          .First().Key;

这更有效:

var maxRepeatedItem = prod.GroupBy(x => x)
                          .MaxBy(x => x.Count())
                          .First().Key;

但它需要MoreLinq的扩展名MaxBy

编辑(根据评论):

如果你想要所有最大重复元素,这是一个可能的解决方案:

var grouped = prod.ToLookup(x => x);
var maxRepetitions = grouped.Max(x => x.Count());
var maxRepeatedItems = grouped.Where(x => x.Count() == maxRepetitions)
                              .Select(x => x.Key).ToList(); 

答案 1 :(得分:17)

您可以使用LINQ:

string maxRepeated = prod.GroupBy(s => s)
                         .OrderByDescending(s => s.Count())
                         .First().Key;