Цикличное выполнение C# через массив

Я - цикличное выполнение через массив строк, такой как (12.01.1992 грузовик яблока 10.12.10 оранжевый велосипед). Длина массива всегда будет делимой 3. Я должен циклично выполниться через массив и захватить первые 3 объекта (я собираюсь вставить их в DB), и затем захватите следующие 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.
}
15
задан abelenky 9 March 2010 в 20:44
поделиться

5 ответов

Просто увеличивайте 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 как верхнюю границу. Это только замаскирует ошибки в предварительных условиях.

24
ответ дан 1 December 2019 в 00:45
поделиться

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

//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 для верхней границы. Код как есть работает нормально, потому что массив гарантированно кратен трем, как указано в вопросе. Если бы этой гарантии не было, вам нужно было бы вместо этого проверить верхнюю границу с помощью theData.Length - 2.

2
ответ дан 1 December 2019 в 00:45
поделиться

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

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

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

    } 
8
ответ дан 1 December 2019 в 00:45
поделиться

Не слишком сложно. Просто увеличьте счетчик цикла 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
ответ дан 1 December 2019 в 00:45
поделиться

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

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

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

3
ответ дан 1 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: