S Take () and . Skip () you can:
int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int splitIndex = 4;
You can use .ToList() instead of .ToArray() if you want List<int> .
EDIT:
After you slightly changed (clarified, maybe) your question, I think this is what you need:
public static class Extensions { public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, int parts) { var list = new List<T>(source); int defaultSize = (int)((double)list.Count / (double)parts); int offset = list.Count % parts; int position = 0; for (int i = 0; i < parts; i++) { int size = defaultSize; if (i < offset) size++;
Using it:
int[] a = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; var lists = a.Split(2);
This will create:
divided by 2: a.Split(2);
| item 1 | item 6 | | item 2 | item 7 | | item 3 | item 8 | | item 4 | item 9 | | item 5 | |
splits into 3: a.Split(3);
| item 1 | item 4 | item 7 | | item 2 | item 5 | item 8 | | item 3 | item 6 | item 9 |
divided by 4: a.Split(4);
| item 1 | item 4 | item 6 | item 8 | | item 2 | item 5 | item 7 | item 9 | | item 3 | | | |
In addition, if you have:
int[] b = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
and split into 4: b.Split(4);
| item 1 | item 4 | item 7 | item 9 | | item 2 | item 5 | item 8 | item 10| | item 3 | item 6 | | |