2017-07-05 1 views
-4

Lets sagen, ich Array von ints:Linq SortiertNach letzten n Werte

int[] values = new int[]{1,2,7,9,8,0}; 

Wie letzten 2 Werte orderby?

int[] values = new int[]{1,2,7,9,0,8}; 
+1

Was von Gruppe bedeuten nicht wahr? Wie ein neues Array mit den letzten 2 Werten erstellen? – Mark

+0

Gruppe, meinst du tauschen? Was hat es mit Linq zu tun? –

+0

Sorry, ich meine OrderBy. –

Antwort

4

Sie tun können, es wie folgt aus:

int[] values = new int[] { 1, 2, 7, 9, 8, 0 }; 
// Array.Sort accepts index and length, so you can sort only part of array 
Array.Sort(values, values.Length - 2, 2); 
// results in {1, 2, 7, 9, 0, 8} 
+0

Können Sie dies mit anderen Sammlungen tun? – Pete

+3

@Pete können Sie es auch mit 'List ' auf die gleiche Weise tun: 'list.Sort (list.Count - 2, 2, Comparer .Default);' – Evk

+0

Das ist gut danke :) –

0

die Allgemein Enumerable Erweiterungen verwenden, kam ich mit diesem nach oben. Denken Sie nicht, dass es das hübscheste Ding ist. Evks Lösung sieht viel sauberer aus.

values = values.TakeWhile((n, index) => index < values.Length -2) 
     .Concat(
      values.SkipWhile((n, index) => index < values.Length - 2).OrderBy(value => value) 
     ).ToArray(); 
0

Versuchen Sie, dieses

int[] values = new int[]{1,2,7,9,8,0}; 
var temp = values. Length > 1 ? new int[2] { values[length -2],values[values. Length-1] } : new inte[]; 

Var templist = values.tolist(); 
IF (values.length >1) 
{ 
templist.removeat(values. Length-1) 
templist.removeat(values.length-1) 
} 
templist.addrange(temp.tolist().orderby(x=> x)) 
Values= templist. Toarray() 

Im Schreiben von meinem Handy sorry für den unformatierten Text