我需要能够在int
array
中找到第n个最大的数字,我已经有一个linq
语句返回一些内容,但它没有传递已设置的用例起来。 array
是:
var numbers = new[] { 5, 7, 5, 3, 6, 7, 9 };
我的代码是:
var result = numbers.GroupBy(x => x)
.OrderByDescending(group => group.Key)
.SkipWhile(group =>
{
n -= group.Count();
return n > 0;
})
.First()
.ToArray();
我不明白为什么我没有得到预期的结果?
result[0] == 9
result[1] == 7
答案 0 :(得分:2)
您可以使用Take()
在订单降序后获取n
个最大的项目:
var result = numbers.GroupBy(x => x)
.OrderByDescending(group => group.Key)
.Take(n)
.Select(group => group.Key)
.ToArray();
<强> dotnetfiddle demo
强>
或使用Skip(n-1).Take(1)
,如果您只想获取第n个项目。