С# цикл через массив

Я перебираю массив строк, например (1/12/1992 apple truck 12/10/10 оранжевый велосипед). Длина массива всегда будет делиться на 3. Мне нужно пройти через массив и захватить первые 3 элемента (я собираюсь вставить их в БД), а затем захватить следующие 3 и так далее и так далее, пока все они прошли.

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

Ответ 1

Просто увеличивайте i на 3 на каждом шаге:

  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
  }

Чтобы ответить на некоторые комментарии, задано, что theData.Length является кратным 3, поэтому нет необходимости проверять на theData.Length-2 как верхний. Это будет только маскировать ошибки в предварительных условиях.

Ответ 2

i++ является стандартным использованием цикла, но не единственным способом. Попробуйте увеличивать на 3 каждый раз:

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

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

    } 

Ответ 3

Не слишком сложно. Просто увеличивайте счетчик цикла for на 3 каждой итерации, а затем смещайте индексатор, чтобы получить партию по 3 за раз:

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

Если длина массива не была увеличена до трех, вам нужно будет проверить верхнюю границу с помощью theData.Length - 2.

Ответ 4

Для цикла for нет необходимости просто добавлять его. Вы можете выполнить три цикла.

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

В принципе, вы просто используете индексы для захвата значений в вашем массиве. Один момент, который следует отметить здесь, я не проверяю, проходите ли вы мимо конца вашего массива. Убедитесь, что вы выполняете проверку границ!

Ответ 5

Это должно работать:

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

Я один раз ответил на этот ответ. Я уверен, что это связано с использованием theData.Length для верхнего. Код как работает отлично, потому что, как утверждается, массив гарантированно будет кратным трем. Если эта гарантия не была на месте, вам нужно будет проверить верхнюю границу с помощью Data.Length - 2.

Ответ 6

Вот более общее решение:

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

}