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