Split List into Sublists with LINQ
c#, data-structures, linq
Solution
Try the following code.
public static List<List<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())
.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 `List`s
Problem
Is there any way I can separate a `List<SomeObject>` into several separate lists of `SomeObject`, using the item index as the delimiter of each split? Let me exemplify: I have a `List<SomeObject>` and I need a `List<List<SomeObject>>` or `List<SomeObject>[]`, so that each of these resulting lists will contain a group of 3 items of the original list (sequentially). eg.: 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.