2009-04-28 9 views
0

Ich brauche ein Array mit umgekehrt alternierenden Elementen des ursprünglichen Arrays.Erhalten Sie das Ergebnis auf einfachere Weise

Zum Beispiel: ein Array mit Elementen {12,56,67}.

Ich brauche enthält ein Array erhalten {67,12} (Umkehren Array {67,56,12} erhalten dann alternative Elemente Mittel nehmen {67,12})

Ich muss, dies zu tun in C#

+0

Ist das eine HW-Frage? –

+0

Wir können, aber sollten Sie nicht selbst Ihre Hausaufgaben machen? –

+0

Ich brauche einen alternativen Weg, warum. – peter

Antwort

2

Wenn Sie C# 3 verwenden, versuchen Sie dies:

int[] array = {1,2,3,4,5,6}; 
var x = array.Reverse().Where((n,i) => i % 2 !=0); 

Wo ist eine Erweiterung Methode (neu in C# 3.0), die Teil einer Sprache Feature namens LINQ bildet. Es filtert eine Sequenz basierend auf einem Prädikat. Im obigen Beispiel ist n das Element der Sequenz und i ist der auf Null basierende Index des Elements in der Sequenz. Beide sind stark typisiert. Das Prädikat i% 2! = 0 besagt, dass der Index des Elements nicht direkt durch 2 teilbar ist. Wir sprechen also die Liste um und wählen die ungeraden Elemente daraus aus.

Nicht die effizienteste Lösung, aber kurz und prägnant.

+0

Wo ((n, i) => i% 2! = 0) ,, was hier passiert ,, n und ich deklariere nicht den Datentyp, dann auch – peter

+0

das funktioniert gut in online von code ,, Kannst du mir alles sagen ,, ich bin abeginner ich muss alles studieren ,, was ist Var Schlüsselwort hier ,, ich sah diese Dinge in LINQ Abfrage – peter

+0

Ich habe eine Erklärung in der Antwort oben hinzugefügt, hoffe das hilft. –

4

Dies ist nicht die kürzeste Antwort, die Sie bekommen, aber es scheint mir ziemlich optimiert zu sein.

int[] rgIn = new int[]{0,1,2,3,4,5}; 

int[] rgOut = new int[rgIn.Length/2]; 

int ixOut = 0; 
for (int ixIn = rgIn.Length - 2; ixIn >= 0; ixIn -= 2) 
{ 
    rgOut[ixOut++] = rgIn[ixIn]; 
} 
+0

das funktioniert gut ,, aber die andere ist mehr optimiert – peter

+0

Haben Sie es Benchmarks? Definiere optimiert;) – Alex

Verwandte Themen