7

だから私はこれらの数行のコードを持っています:

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
    }
}

gotoを試してみましたが、ご覧のとおり、forループをもう一度開始すると、最初の行から開始されます。

では、どうすればループを再開して開始行を変更できますか(配列から別のキーを取得する)?

4

5 に答える 5

12

ここでは、afor loopは間違ったタイプのループであり、ループの意図を正しく表現していないと主張します。カウンターを台無しにしないことを強くお勧めします。

int i = 0;
while(i < newData.Length) 
{
    if (//Condition)
    {
       //do something with the first line
       i++;
    }
    else
    {
        i = 1;
    }
}
于 2012-05-28T16:18:37.183 に答える
8

indexforループのを変更するだけです。

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;
    }
}

これは優れたスパゲッティコードのように見えることに注意してください...forループのインデックスを変更すると、通常、何か間違ったことをしていることを示します。

于 2012-05-28T16:17:07.847 に答える
4

ステートメントに設定i = 0するだけです。elseループ宣言では、i++それをに設定して1、最初の行をスキップする必要があります。

于 2012-05-28T16:17:21.653 に答える
0
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;
    }
}
于 2012-05-28T16:18:07.183 に答える
0

iアレイをリセットしてサイズを変更するだけです

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;
    }
}
于 2012-05-28T16:20:45.533 に答える