如何在C#中为int列表构建直方图

Sim*_*mon 4 c# linq

可能重复:
使用LINQ查找数组中最常用的数字

我有一个int的列表List<int> demoList,这是类似的{1, 2, 1, 1, 1, 3, 2, 1},我想编写一个LINQ语句来获取该列表中出现次数最多的数字,在我的例子中是这样1.

Dar*_*rov 6

var list = new[] { 1, 2, 1, 1, 1, 3, 2, 1 };
var result = list
    .GroupBy(x => x)
    .Select(x => new { Number = x.Key, Count = x.Count() })
    .OrderByDescending(x => x.Count)
    .FirstOrDefault();
Console.WriteLine("highest number = {0}, count = {1}", result.Number, result.Count);
Run Code Online (Sandbox Code Playgroud)


Tim*_*ter 6

 int highestAppearanceNum = demoList.GroupBy(i => i)
            .OrderByDescending(grp => grp.Count())
            .Select(grp => grp.First())
            .First();
Run Code Online (Sandbox Code Playgroud)

编辑:如果您还想知道出现的频率:

var appearances = demoList.GroupBy(i => i)
    .OrderByDescending(grp => grp.Count())
    .Select(grp => new { Num = grp.Key, Count = grp.Count() });
if (appearances.Any())
{
    int highestAppearanceNum = appearances.First().Num;     // 1
    int highestAppearanceCount = appearances.First().Count; // 5
}
Run Code Online (Sandbox Code Playgroud)