Мне нужно получить каждый n-й элемент динамического массива, начиная со значения где-то в массиве. Мне нужно выбрать определенные значения из одного массива, и я собираюсь добавить их в другой.
В основном это:
for (int i = 0; i < array.Length; i++)
{
if (i % 5 == 0) // but starting at value 200 and every 5th from here
{
// get value
}
if (i % 50 == 0) // but starting from value 350 and every 50th value from here
{
// get value
}
}
Заранее благодарю за любую помощь!
Было бы замечательно, если бы вы могли предоставить минимальный воспроизводимый пример, включая образцы входных данных и ожидаемые результаты, основанные на этих образцах входных данных. Обязательно включайте входы с четным числом записей и входы с нечетным числом записей.
Почему бы вам не поместить вспомогательное значение в цикл for, его значение в основном равно 5, и если вы достигнете начального значения, вы достигнете этого вспомогательного значения и начального значения.
@ Jordy van Eijk, извините, что я запутался, не означал буквально прямо в середине массива, а в том месте в массиве, которое не находится в начале.
Какое значение имеют 200 и 350?
const int firstThreshold = 200; const int secondThreshold = 350; for (int i = 0; i < array.Length; i++) { if (i >= firstThreshold && (i - firstThreshold) % 5 == 0) { ... } if (i >= secondThreshold && (i - secondThreshold) % 50 == 0) { ... } } может быть?
@ Corak и DiabloSteve, спасибо за подсказку о помощнике по стоимости, это то, что мне нужно :)
@agrom - Тогда, пожалуйста, измените заголовок вопроса, чтобы отразить, что вы на самом деле имеете в виду не точную середину массива.
@Corak, подойдет!
// x - начальная точка> 0 и <array.Length int y = 1; // сначала мы начинаем с каждого значения for (int i = x; i <array.Length; i + = y) {// получаем значение if (i% 5 == 0) // но начиная со значения 200 и каждую пятую от здесь {// получаем значение x = 200; // назад или вперед к 200-му элементу y = 5; // шаги теперь шириной 5} if (i% 50 == 0) // но начиная со значения 350 и каждого 50-го значения отсюда {// получаем значение x = 350; // назад или вперед к 350-му элементу y = 50; // ширина ступеней теперь 50}}





for(int i = (int)(array.Length / 2); i < array.Length; i++)
{
if (i % 5 == 0) // but starting at value 200 and every 5th from here
{
// get value
}
if (i % 50 == 0) // but starting from value 350 and every 50th value from here
{
// get value
}
}
Разве ты не этого хочешь?
Это даст вам каждый 5-й элемент после середины:
int[] subarr = array.Where((i, val) => (i >= array.Length / 2 && i % 5 == 0)).ToArray();
Это по-прежнему выполнит условное выражение i >= для каждый элемент в массиве. Может быть, использовать .Skip(), чтобы избежать этого, но в этом случае старый цикл for может быть лучше.
(array.Length / 2) + i % 5 == 0?