Я хочу взять IEnumerable<T>
и разделить его на куски фиксированного размера.
У меня есть это, но кажется, что он неэлегантен из-за всего создания/копирования списка:
private static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> items, int partitionSize)
{
List<T> partition = new List<T>(partitionSize);
foreach (T item in items)
{
partition.Add(item);
if (partition.Count == partitionSize)
{
yield return partition;
partition = new List<T>(partitionSize);
}
}
// Cope with items.Count % partitionSize != 0
if (partition.Count > 0) yield return partition;
}
Есть ли что-то более идиоматическое?
EDIT: хотя это было отмечено как дубликат Разделить массив на массив массива подпоследовательности, это не так - этот вопрос имеет дело с расщеплением массива, тогда как это составляет около IEnumerable<T>
. Кроме того, этот вопрос требует, чтобы последняя подпоследовательность была дополнена. Эти два вопроса тесно связаны, но не совпадают.