Kirev
Kirev

Reputation: 147

c# restart for loop

So I have these few lines of code:

string[] newData = File.ReadAllLines(fileName)
int length = newData.Length;
for (int i = 0; i < length; i++)
{
    if (Condition)
    {
       //do something with the first line
    }
    else
    {
      //restart the for loop BUT skip first line and start reading from the second
    }
}

I've tried with goto, but as you can see, if I start the for loop again, it'll start from the first line.

So how can I restart the loop and change the starting line(getting different key from the array)?

Upvotes: 7

Views: 24152

Answers (5)

Binary Worrier
Binary Worrier

Reputation: 51711

I'd argue that a for loop is the wrong type of loop here, it doesn't correctly express the intent of the loop, and would definitely suggest to me that you're not going to mess with the counter.

int i = 0;
while(i < newData.Length) 
{
    if (//Condition)
    {
       //do something with the first line
       i++;
    }
    else
    {
        i = 1;
    }
}

Upvotes: 14

Hiren Visavadiya
Hiren Visavadiya

Reputation: 485

string[] newData = File.ReadAllLines(fileName)

for (int i = 0; i <= newData.Length; i++)
{
    if (//Condition)
    {
       //do something with the first line
    }
    else
    {
      //restart the for loop BUT skip first line and start reading from the second
      i = 0;
    }
}

Upvotes: 0

Cole Tobin
Cole Tobin

Reputation: 9430

You would just reset i and resize the array

int length = newData.Length; // never computer on each iteration
for (int i = 0; i < length; i++)
{
    if (condition)
    {
       //do something with the first line
    }
    else
    {
      // Resize array
      string[] newarr = new string[length - 1 - i];
      /*
       * public static void Copy(
       *    Array sourceArray,
       *    int sourceIndex,
       *    Array destinationArray,
       *    int destinationIndex,
       *    int length
       * )
       */
      System.Array.Copy(newData, i, newarr, 0, newarr.Length); // if this doesn't work, try `i+1` or `i-1`
      // Set array
      newData = newarr;
      // Restart loop
      i = 0;
    }
}

Upvotes: 0

gdoron
gdoron

Reputation: 150253

Just change the index of the for loop:

for (int i = 0; i < newData.Length; i++) // < instead of <= as @Rawling commented.
{
    if (//Condition)
    {
       //do something with the first line
    }
    else
    {
      // Change the loop index to zero, so plus the increment in the next 
      // iteration, the index will be 1 => the second element.
      i = 0;
    }
}

Note that this looks like an excellent spaghetti code... Changing the index of a for loop usually indicate that you're doing something wrong.

Upvotes: 8

Rawling
Rawling

Reputation: 50104

Just set i = 0 in your else statement; the i++ in the loop declaration should then set it to 1 and thus skip the first line.

Upvotes: 4

Related Questions