Каждый n-й элемент из массива, начиная откуда-то в массиве C#

Мне нужно получить каждый 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
    }
}

Заранее благодарю за любую помощь!

(array.Length / 2) + i % 5 == 0?
Jordy van Eijk 20.09.2018 16:14

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

mjwills 20.09.2018 16:14

Почему бы вам не поместить вспомогательное значение в цикл for, его значение в основном равно 5, и если вы достигнете начального значения, вы достигнете этого вспомогательного значения и начального значения.

DiabloSteve 20.09.2018 16:17

@ Jordy van Eijk, извините, что я запутался, не означал буквально прямо в середине массива, а в том месте в массиве, которое не находится в начале.

agrom 20.09.2018 16:22

Какое значение имеют 200 и 350?

Corak 20.09.2018 16:22
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 20.09.2018 16:25

@ Corak и DiabloSteve, спасибо за подсказку о помощнике по стоимости, это то, что мне нужно :)

agrom 20.09.2018 16:27

@agrom - Тогда, пожалуйста, измените заголовок вопроса, чтобы отразить, что вы на самом деле имеете в виду не точную середину массива.

Corak 20.09.2018 16:27

@Corak, подойдет!

agrom 20.09.2018 16:33

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

Andreas 20.09.2018 16:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
1 014
2

Ответы 2

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 может быть лучше.

Joel Coehoorn 20.09.2018 16:28

Другие вопросы по теме