Search code examples
c#.netarrayslinqlinq-to-objects

Splitting an array using LINQ


I have a collection uni-dimensional like this:

[1,2,4,5.....n]

I would like to convert that collection in a bi-dimensional collection like this:

[[1,2,3],
[4,5,6],
...]

Basically I want to group or split if you want, the array in groups of 'n' members

I can do it with a foreach statement, but I am currently learning LINQ so instead of iterating through all elements and create a new array manually I would like to use the LINQ features (if applicable)

Is there any LINQ function to help me to accomplish this??

I was thinking in the GroupBy or SelectMany I do not know if they will help me though but they might

Any help will be truly appreciate it =) :**


Solution

  • You can group by the index divided by the batch size, like this:

    var batchSize = 3;
    var batched = orig
        .Select((Value, Index) => new {Value, Index})
        .GroupBy(p => p.Index/batchSize)
        .Select(g => g.Select(p => p.Value).ToList());