1

有没有办法在 C# 中使用 Linq来查找数组中的大多数元素?为了让它更复杂一点,如果没有多数,它应该取第一个元素。

因此,例如对于数组["A", "B", "B"],该语句的计算结果应为"B"。并且,对于数组["A", "B", "C"],该语句的计算结果应为"A"

我敢肯定还有 100 种其他方法可以做到这一点,但很好奇是否有 Linq 解决方案。

4

3 回答 3

6
var majority = array.GroupBy(x => x)
                    .MaxBy(g => g.Count())
                    .Key;

在这里,我正在使用MaxBy(按照它的版本的链接,但想法很简单),您可以将其定义为扩展方法。

于 2012-05-10T17:44:01.187 回答
5
string majority = yourArray.GroupBy(x => x)
                           .OrderByDescending(g => g.Count())
                           .First()
                           .Key;

在线查看它:ideone

于 2012-05-10T17:43:57.403 回答
0
var strings = new List<string>{"A", "B", "B"};

var mostCommonOrFirst = strings
    .GroupBy(s => s)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key)
    .First();
于 2012-05-10T17:45:01.303 回答