WedX - журнал о программировании и компьютерных науках

Перечислитель пакетной обработки С#

Возможный дубликат:
Список разделов LINQ в списки из 8 участников.

У меня есть IEnumerable<T>, и я хотел бы преобразовать его в IEnumerable<List<T>>, где каждый список представляет собой набор элементов в том же порядке, что и исходный перечислитель. Каждая партия должна состоять из batchSize элементов, за исключением последней партии, которая должна содержать оставшиеся элементы, поэтому она может быть меньше batchSize.

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

Последовательность очень длинная, и выборка занимает некоторое время, поэтому я не могу заранее упаковать все перечисляемое в List<T> или массив. Вместо этого я хотел бы получить batchSize результатов, а затем сразу же начать обработку первого пакета.

Позже я могу решить сделать выборку асинхронной по отношению к обработке (чтобы обработка пакета 1 и выборка пакета 2 могли происходить параллельно), но сейчас я просто ищу однопоточное решение.

Любые предложения о том, как сделать это пакетное, потоковое перечисление эффективно и элегантно? В идеале я хотел бы упаковать его в метод расширения, который я могу использовать повторно, например.

public static IEnumerable<T> Batch<T>(this IEnumerable<T> source, int count);

  • Лично я бы порекомендовал ответ Джона и использовал MoreLinq. (найдено по ссылке выше) 29.09.2010
  • Согласитесь, это звучит как хороший ответ. Спасибо, что раскопали этот вопрос! Если бы я только подумал о разделе, а не о партии, погуглить. Давайте закроем этот. 29.09.2010

Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]