Linq разделить последовательность на несколько последовательностей - C#

Узнай цену своей работы

Формулировка задачи:

Имеем последовательсть IEnumerable<T>. Необходимо "постраничное" чтение, то есть извлекать из этой последовательности, например, 30 элементов, потом еще 30 .... и остаток (меньше 30). Кол-во элементов в данном случае фиксировано, но хотелось бы чтоб можно было указать как параметр.

Решение задачи: «Linq разделить последовательность на несколько последовательностей»

textual
Листинг программы
public static IEnumerable<IEnumerable<T>> Paginate<T>(this IEnumerable<T> collection, int pageSize)
{
    if (collection == null) throw new ArgumentNullException("collection");
    if (pageSize < 0) throw new ArgumentOutOfRangeException("pageSize");
 
    var page = new T[pageSize];
    int i = 0;
    foreach (T item in collection)
    {
        page[i++] = item;
        if (i == pageSize)
        {
            yield return page;
            page = new T[pageSize];
            i = 0;
        }
    }
    if (i == pageSize) yield return page;
    else yield return page.Take(i).ToArray();
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.2 из 5
Похожие ответы