在int数组中找到第n个最大值

时间:2016-04-22 00:24:57

标签: c# linq

我需要能够在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

1 个答案:

答案 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个项目。