Felipe Lima Felipe Lima - 5 months ago 77
C# Question

Split List into Sublists with LINQ

Is there any way I can separe a List into several separate lists of SomeObject, using the item index as the delimiter of each split?

Let me exemplify:
I have a

and I need a
, so that each of these resulting lists will contain a group of 3 items of the original list (sequentially).

Original List:
[a, g, e, w, p, s, q, f, x, y, i, m, c]

Resulting lists:
[a, g, e], [w, p, s], [q, f, x], [y, i, m], [c]

I'd also need the resulting lists size to be a parameter of this function.

Is it possible??


Try the following code.

public static IList<IList<T>> Split<T>(IList<T> source)
    return  source
        .Select((x, i) => new { Index = i, Value = x })
        .GroupBy(x => x.Index / 3)
        .Select(x => x.Select(v => v.Value).ToList())

The idea is to first group the elements by indexes. Dividing by three has the effect of grouping them into groups of 3. Then convert each group to a list and the IEnumerable of List to a List of Lists