2016-04-22 7 views
2

Ich muss in der Lage sein, die n-ten größten Zahlen in einem int zu finden, ich habe bereits eine linq-Anweisung, die etwas zurückgibt, aber es nicht die verwendeten Fälle, die eingerichtet sind. Die array ist:Finden der n-größten in einem int-Array

var numbers = new[] { 5, 7, 5, 3, 6, 7, 9 }; 

Mein Code ist:

var result = numbers.GroupBy(x => x) 
       .OrderByDescending(group => group.Key) 
       .SkipWhile(group => 
       { 
        n -= group.Count(); 
        return n > 0; 
       }) 
       .First() 
       .ToArray(); 

Ich verstehe nicht, warum ich nicht die erwarteten Ergebnisse zu erzielen?

result[0] == 9 
    result[1] == 7 
+0

Und was bekommen Sie? – zerkms

+0

Ergebnis [0] == 7 Ergebnis [1] == 7 – Arnold

+0

Für was 'n'? Wie auch immer, du überspringst 'n' erste Elemente, also bekommst du für 'n> 0' nicht '9'. – zerkms

Antwort

2

Sie können nur Take() verwenden, um die n größten Posten zu erhalten, nachdem die Sammlung bestellt absteigend:

var result = numbers.GroupBy(x => x) 
        .OrderByDescending(group => group.Key) 
        .Take(n) 
        .Select(group => group.Key) 
        .ToArray(); 

dotnetfiddle demo

oder Skip(n-1).Take(1) verwenden, wenn Sie nur erhalten bedeuten der nth Artikel stattdessen.

Verwandte Themen