2017-02-07 4 views
0

Ich brauche einen Algorithmus, der das Array-Element aus dem ersten Index und schieben Sie das nächste Element (aus dem ursprünglichen Array bei letzten Index), bis die passende Menge von Elementen gefunden wird.Algorithmus für die Verschiebung des Array-Elements

wie unten:

Original array : {10,20,30,40,50,60,70,80,90,100,110,120} 

1st iteration : 10,20,30,40 
2nd iteration : 20,30,40,50 
3rd iteration : 30,40,50,60 
4th iteration : 40,50,60,70 .... and so on until the matching criteria set found. 

Logic sollten gefunden, bis die gewünschte Menge von Feldelement iterieren (basierend auf einigen Berechnungen auf Elemente)

+0

Das scheint ein ganz triviales Problem zu sein, welchen Code haben Sie schon ausprobiert? – Ben

+2

Warum verwenden Sie nicht einfach einen Zähler, der um 1 erhöht bis array.Length - 5 – ViVi

+0

Während Sie das Array ändern können, wenn Sie nur für eine Teilmenge von 5 Elementen suchen, gibt es keine Notwendigkeit. Iterate durch sie mit Start/Ende-Indizes 5 Elemente auseinander und/oder hebel 'ArraySegment', um einfache Berechnungen auf der Menge von 5 zu tun. –

Antwort

4

Ihre Frage ist vage;. wenn Sie wollen Verschiebung den Ausgangspunkt:

int array = new[] {10,20,30,40,50}; 

    for (int shift = 0; shift < array.Length; ++shift) { 
    for (int i = shift; i < array.Length; ++i) { 
     int value = array[i]; 

     Console.Write(value); 
     Console.Write(", "); 
    } 

    Console.WriteLine(); 
    } 

Ergebnis:

10, 20, 30, 40, 50, 
    20, 30, 40, 50, 
    30, 40, 50, 
    40, 50, 
    50, 

Wenn Sie wollen drehen das Array Ich schlage vor, Modulo arithmetics:

for (int shift = 0; shift < array.Length; ++shift) { 
    for (int index = 0; index < array.Length; ++index) { 
     int i = (shift + index) % array.Length; 

     int value = array[i]; 

     Console.Write(value); 
     Console.Write(", "); 
    } 

    Console.WriteLine(); 
    } 

Ergebnis:

10, 20, 30, 40, 50, 
    20, 30, 40, 50, 10, 
    30, 40, 50, 10, 20, 
    40, 50, 10, 20, 30, 
    50, 10, 20, 30, 40,