Click here to Skip to main content
15,886,873 members
Articles / Programming Languages / C#
Tip/Trick

Splitting a Collection into Multiple Arrays - The Linq Way

Rate me:
Please Sign up or sign in to vote.
0.00/5 (No votes)
1 Jun 2012CPOL 17.9K   2  
This is an alternative for "How to split an array into multiple arrays"

Introduction

This is an alternative to the original tip[^] but based on Linq. I want to use the method in a generic way, i.e. not re-invent the wheel for each new problem. And I want to make slices in a Linq style:

C#
int n = 3;
int[] data = new int[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14};
foreach (var slice in data.GetSlices(n))
{
    Console.WriteLine(string.Join(",", slice));
}

Suggested Solution

C#
public static class Ext
{
    public static IEnumerable<T[]> GetSlices<T>(this IEnumerable<T> source, int n)
    {
        IEnumerable<T> it = source;
        T[] slice = it.Take(n).ToArray();
        it = it.Skip(n);
        while (slice.Length != 0)
        {
            yield return slice;
            slice = it.Take(n).ToArray();
            it = it.Skip(n);
        }
    }
}

public class Program
{
    public static void Main()
    {
        int n = 3;
        int[] data = new int[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14};
        foreach (var slice in data.GetSlices(n))
        {
            Console.WriteLine(string.Join(",", slice));
        }
    }
}

Output:

1,2,3
4,5,6
7,8,9
10,11,12
13,14

History

  • V1.0, 2012-06-01: Initial version

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Founder eXternSoft GmbH
Switzerland Switzerland
I feel comfortable on a variety of systems (UNIX, Windows, cross-compiled embedded systems, etc.) in a variety of languages, environments, and tools.
I have a particular affinity to computer language analysis, testing, as well as quality management.

More information about what I do for a living can be found at my LinkedIn Profile and on my company's web page (German only).

Comments and Discussions

 
-- There are no messages in this forum --