Skip to content

Instantly share code, notes, and snippets.

@jmcd
Created March 10, 2014 12:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmcd/9464263 to your computer and use it in GitHub Desktop.
Save jmcd/9464263 to your computer and use it in GitHub Desktop.
Split array into chunks
public static class ArrayChunker<T>
{
public static T[][] Chunk(T[] sourceArray, int chunkLength)
{
var numberOfFullBuffers = sourceArray.Length/chunkLength;
var lengthOfRemainderBuffer = sourceArray.Length%chunkLength;
var hasRemander = lengthOfRemainderBuffer > 0;
var numberOfBuffers = numberOfFullBuffers +( hasRemander ? 1 : 0);
var buffers = new T[numberOfBuffers][];
for (var i = 0; i < numberOfBuffers; i++)
{
var destinationLength = i < numberOfBuffers-1 ? chunkLength : lengthOfRemainderBuffer;
var destinationArray = new T[destinationLength];
buffers[i] = destinationArray;
Array.Copy(sourceArray, i*chunkLength, destinationArray, 0, destinationLength);
}
return buffers;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment