С# цикл через массив
Я перебираю массив строк, например (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
}
}
}