返回列表中重复项的最大值

本文关键字:最大值 列表 返回 | 更新日期: 2023-09-27 18:01:51

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

在上面的代码中,prod List的项目"dfg"重复了三次(max count)…我想要"dfg"作为输出,因为这个项目重复的次数最多。有谁能帮忙吗?

返回列表中重复项的最大值

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

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(); 

您可以使用LINQ:

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