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”作为输出,因为这个项目重复的次数最多。 有人可以帮忙吗?
虽然不是最高效的方法,但它能够运行:
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;