Suponiendo que se refiere a List<T>
, puede utilizar el método GetRange
repetidamente. Heck, usted podría hacer esto con LINQ:
var lists = Enumerable.Range(0, (list.Count + size - 1)/size)
.Select(index => list.GetRange(index * size,
Math.Min(size, list.Count - index * size)))
.ToList();
O usted podría utilizar un bucle, por supuesto:
public static List<List<T>> Split(List<T> source, int size)
{
// TODO: Prepopulate with the right capacity
List<List<T>> ret = new List<List<T>>();
for (int i = 0; i < source.Count; i += size)
{
ret.Add(source.GetRange(i, Math.Min(size, source.Count - i)));
}
return ret;
}
Esto es algo más eficaz que utilizar GroupBy
, aunque se limita a List<T>
como una entrada.
Tenemos otra implementación usando IEnumerable<T>
en MoreLINQ en Batch.cs.
posible duplicado de la [Lista de Split en sublistas con LINQ] (http://stackoverflow.com/questions/419019/split-list-into-sublists-with-linq) – psubsee2003