c# – 如何从数组中获取多个最常见的值并将它们添加到另一个?

我有这样一个数组:

[2 1 2 4 3 3 1]

我正在使用这个……

var query = array.GroupBy(item => item)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key)
    .First();

..获得第一个最常见的价值(在这种情况下:2)

如果我想得到多个值(在这种情况下:2,3,1)怎么办?

我需要将此值添加到另一个临时数组以检查此tempArray.Count> 1.

最佳答案
如果你想让所有群体都与最高统计数量挂钩,你可以这样做:

var tmp = array
   .GroupBy(item => item)
   .OrderByDescending(g => g.Count())
   .Select(g => new {
       Item = g.Key
   ,   Count = g.Count()
   }).ToList();
var res = tmp
    .TakeWhile(p => p.Count == tmp[0].Count)
    .Select(p => p.Item)
    .ToList();

请注意,检查tmp列表计数是否为非零是不必要的,因为执行TakeWhile条件的唯一方法是临时列表中至少有一个项目.换句话说,当tmp为空时,λ条件p => p.Count == tmp [0].永远不会达到.Count,永远不会抛出超出范围的异常.

转载注明原文:c# – 如何从数组中获取多个最常见的值并将它们添加到另一个? - 代码日志