2016-04-22 80 views
2

我需要能夠在intarray中找到第n個最大數字,我已經有一個linq語句返回某些內容,但它沒有傳遞已設置的使用案例。該array是:查找int數組中的第n個最大值

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

你會得到什麼? – zerkms

+0

結果[0] == 7 結果[1] == 7 – Arnold

+0

什麼'n'?無論如何,你正在跳過'n'的第一個元素,所以對於任何'n> 0',你都不會得到'9'。 – zerkms

回答

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個項目。