Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ从字符串[]获得多数票?_C#_Linq - Fatal编程技术网

C# 使用LINQ从字符串[]获得多数票?

C# 使用LINQ从字符串[]获得多数票?,c#,linq,C#,Linq,有没有办法在C中使用Linq来查找数组中的大多数元素?要使它更复杂一点,如果没有多数,它应该使用第一个元素 因此,例如,对于数组[A,B,B],语句的计算结果应为B。 并且,对于数组[A,B,C],语句的计算结果应该是A 我肯定还有100种其他方法可以做到这一点,但我很好奇是否有Linq解决方案 string majority = yourArray.GroupBy(x => x) .OrderByDescending(g =>

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

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

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

string majority = yourArray.GroupBy(x => x)
                           .OrderByDescending(g => g.Count())
                           .First()
                           .Key;
在线查看它的工作情况:

在线查看它的工作情况:

在这里,我使用了它的一个版本的链接,但是想法很简单,您可以将其定义为一个扩展方法

var strings = new List<string>{"A", "B", "B"};

var mostCommonOrFirst = strings
    .GroupBy(s => s)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key)
    .First();


在这里,我使用的是一个版本的链接,但是想法很简单,您可以将其定义为一个扩展方法。

这在logn上。你可以更好地避免排序。如果没有多数计数,那么我认为OrderByDescending不能保证返回原始列表中的第一项。@Magnus:你为什么认为?来自:此方法执行稳定排序;也就是说,如果两个元素的键相等,那么元素的顺序将被保留。实际上,对于相同数量的字符串,则失败。这在日志n上。你可以更好地避免排序。如果没有多数计数,那么我认为OrderByDescending不能保证返回原始列表中的第一项。@Magnus:你为什么认为?来自:此方法执行稳定排序;也就是说,如果两个元素的键相等,那么元素的顺序将被保留。事实上,对于相同数量的字符串,将失败。在另一个答案上有一个指向它的版本的链接。跟随链接。@Dave Bish:你在开玩笑吧?查找序列的最大值很简单。添加一个扩展方法,这与GroupBy做的事情相同。首先@DaveBish:这不一样-它给出相同的结果,但效率更高。@DaveBish是指OrderBy.First而不是GroupBy.First,在你的评论中?在另一个答案上有一个指向它的版本的链接。跟随链接。@Dave Bish:你在开玩笑吧?查找序列的最大值很简单。添加一个扩展方法,这与GroupBy做的事情相同。首先@DaveBish:这不一样-它给出了相同的结果,但效率更高。@DaveBish你的意思是OrderBy.First而不是GroupBy.First,在你的评论中?这对equals也不起作用这对equals也不起作用
var strings = new List<string>{"A", "B", "B"};

var mostCommonOrFirst = strings
    .GroupBy(s => s)
    .OrderByDescending(g => g.Count())
    .Select(g => g.Key)
    .First();