如何使用C# LINQ获取数组中所有出现频率最高的元素
解决方案
写法1:逻辑清晰的分步实现
int[] nums = new[] { 1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7 }; // 按元素值分组 var valueGroups = nums.GroupBy(x => x); // 计算最高出现频率 int maxFreq = valueGroups.Max(g => g.Count()); // 筛选所有频率等于最高频率的元素 List<int> result = valueGroups .Where(g => g.Count() == maxFreq) .Select(g => g.Key) .ToList();
这种写法可读性高,维护方便,适合绝大多数业务场景。
写法2:单条LINQ语句实现
如果希望写成单条链式调用的LINQ语句,可以对分组结果按出现次数二次分组:
List<int> result = nums .GroupBy(x => x) .GroupBy(g => g.Count()) // 按元素的出现次数二次分组 .OrderByDescending(g => g.Key) // 按出现次数降序排序 .First() // 取出现次数最高的那一组分组 .Select(g => g.Key) // 提取元素值 .ToList();
两种写法都可以自动适配任意数量的最高频元素,不需要提前指定返回结果的个数,完全符合需求。
内容的提问来源于stack exchange,提问作者WStar
相关产品推荐
相关产品推荐

