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