使用LINQ从string []进行多数投票?

时间:2012-05-10 17:41:48

标签: c# linq

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

例如,对于数组["A", "B", "B"],语句应该计算为"B"。 并且,对于数组["A", "B", "C"],语句应评估为"A"

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

3 个答案:

答案 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();