2010-03-09 23 views
11

Ich bin durch eine Reihe von Strings, wie zum Beispiel (1/12/1992 Apple Truck 12/10/10 orange Fahrrad) Looping. Die Länge des Arrays wird immer durch 3 teilbar sein. Ich muss das Array durchschleifen und die ersten 3 Elemente (ich werde sie in eine Datenbank einfügen) und dann die nächsten 3 und so weiter und so fort mitnehmen, bis alle Sie wurden durchgemacht.C# Schleife durch ein Array

//iterate the array 
for (int i = 0; i < theData.Length; i++) 
{ 
    //grab 3 items at a time and do db insert, continue until all items are gone. 'theData' will always be divisible by 3. 
} 
+3

Was ist die Frage? –

+2

5 Antworten innerhalb von 40 Sekunden eingereicht, alle mit den gleichen (fast genau) Informationen. Haha. Nett. – JasCav

+2

Was ich interessant finde, ist, dass fünf Antworten gepostet wurden, während ich meins schrieb ... und * nicht ein einziger * die obere Grenze richtig bekam. –

Antwort

20

erhöhen Nur i von 3 in jedem Schritt:

Debug.Assert((theData.Length % 3) == 0); // 'theData' will always be divisible by 3 

    for (int i = 0; i < theData.Length; i += 3) 
    { 
     //grab 3 items at a time and do db insert, 
     // continue until all items are gone.. 
     string item1 = theData[i+0]; 
     string item2 = theData[i+1]; 
     string item3 = theData[i+2]; 
     // use the items 
    } 

einige Kommentare zu beantworten, ist es selbstverständlich, dass theData.Length ein Vielfaches von 3, so gibt es keine muss nach theData.Length-2 als Obergrenze suchen. Das würde nur Fehler in den Vorbedingungen maskieren.

+0

Guter Punkt, um Ihre Ausgabe zu kommentieren – Javier

7

i++ ist die Standard Verwendung einer Schleife, aber nicht der einzige Weg. Versuchen von 3 jedes Mal erhöht wird:

for (int i = 0; i < theData.Length - 2; i+=3) 
    { 

     // use theData[i], theData[i+1], theData[i+2] 

    } 
+3

Sie sind bisher der einzige, der bei der letzten Iteration keinen Out-of-Bounds-Fehler erhalten wird; Stattdessen hören Sie eine Iteration kurz auf. Probieren Sie 'i

+0

@mmyers - große Köpfe denken gleich. :) Habe es schon geändert.Aber ich denke nicht, dass die Überprüfung sowieso notwendig ist, nur einfügen, weil es logisch schien ... – froadie

+1

+1 für gebundene Überprüfung der Länge! – FrustratedWithFormsDesigner

3

Nicht zu schwierig. inkrementieren nur der Zähler des for Schleife um 3 jeder Iteration und dann versetzt den Indexer die Charge 3 zu einer Zeit zu erhalten:

for(int i=0; i < theData.Length; i+=3) 
{ 
    var item1 = theData[i]; 
    var item2 = theData[i+1]; 
    var item3 = theData[i+2]; 
} 

Wenn die Länge des Arrays nicht ein Vielfaches von drei sein sollte garuanteed , müssten Sie stattdessen die obere Grenze mit theData.Length - 2 überprüfen.

2

Ihre for-Schleife muss nicht nur eine hinzufügen. Sie können eine Schleife um drei durchführen.

for(int i = 0; i < theData.Length; i+=3) 
{ 
    string value1 = theData[i]; 
    string value2 = theData[i+1]; 
    string value3 = theData[i+2]; 
} 

Grundsätzlich verwenden Sie nur Indizes, um die Werte in Ihrem Array zu erfassen. Ein Punkt, den Sie hier beachten sollten, ich überprüfe nicht, ob Sie über das Ende Ihres Arrays hinausgehen. Stellen Sie sicher, dass Sie Grenzen prüfen!

+0

Downvote? Wozu? (Ich bemerkte alle Antworten außer der ersten wurden downvoted. Lame.) – JasCav

+0

der erste war ursprünglich, aber scheint weggenommen worden. Seltsam. – froadie

1

sollte diese Arbeit:

//iterate the array 
for (int i = 0; i < theData.Length; i+=3) 
{ 
    //grab 3 items at a time and do db insert, continue until all items are gone. 'theData' will always be divisible by 3. 
    var a = theData[i]; 
    var b = theData[i + 1]; 
    var c = theData[i + 2]; 
} 

Ich habe einmal für diese Antwort Downvoted worden. Ich bin mir ziemlich sicher, dass es mit der Verwendung von Data.Length für die Obergrenze zusammenhängt. Der Code as funktioniert gut, weil Array garantiert ein Vielfaches von drei ist, wie die Frage Staaten. Wenn diese Garantie nicht vorhanden wäre, müssten Sie die obere Grenze stattdessen mit dem Data.Length - 2 überprüfen.

1

Hier ist eine allgemeine Lösung:

int increment = 3; 
for(int i = 0; i < theData.Length; i += increment) 
{ 
    for(int j = 0; j < increment; j++) 
    { 
     if(i+j < theData.Length) { 
     //theData[i + j] for the current index 
     } 
    } 

}