有没有办法在 C# 中使用 Linq来查找数组中的大多数元素?为了让它更复杂一点,如果没有多数,它应该取第一个元素。
因此,例如对于数组["A", "B", "B"]
,该语句的计算结果应为"B"
。并且,对于数组["A", "B", "C"]
,该语句的计算结果应为"A"
。
我敢肯定还有 100 种其他方法可以做到这一点,但很好奇是否有 Linq 解决方案。
var majority = array.GroupBy(x => x)
.MaxBy(g => g.Count())
.Key;
在这里,我正在使用MaxBy
(按照它的版本的链接,但想法很简单),您可以将其定义为扩展方法。
string majority = yourArray.GroupBy(x => x)
.OrderByDescending(g => g.Count())
.First()
.Key;
在线查看它:ideone
var strings = new List<string>{"A", "B", "B"};
var mostCommonOrFirst = strings
.GroupBy(s => s)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.First();