如何将大型数组拆分成更小的数组?

给定一个大数组如何将它分成较小的数组,并将较小数组的大小指定为方法的参数?

例如,给定数字,Split的实现是什么?

int[] numbers = new int[7845]; int[][] sectionedNumbers = numbers.Split(1000); sectionedNumbers.Length; //outputs 8 sectionedNumbers[7].Length; //outputs 845 

您可以使用扩展方法执行此操作:

 using System; static class Program { static T[][] Split(this T[] arrayIn, int length) { bool even = arrayIn.Length%length == 0; int totalLength = arrayIn.Length/length; if (!even) totalLength++; T[][] newArray = new T[totalLength][]; for (int i = 0; i < totalLength;++i ) { int allocLength = length; if (!even && i == totalLength - 1) allocLength = arrayIn.Length % length; newArray[i] = new T[allocLength]; Array.Copy(arrayIn, i * length, newArray[i], 0, allocLength); } return newArray; } static void Main(string[] args) { int[] numbers = new int[8010]; for (int i = 0; i < numbers.Length; ++i) numbers[i] = i; int[][] sectionedNumbers = numbers.Split(1000); Console.WriteLine("{0}", sectionedNumbers.Length); Console.WriteLine("{0}", sectionedNumbers[7].Length); Console.WriteLine("{0}", sectionedNumbers[1][0]); Console.WriteLine("{0}", sectionedNumbers[7][298]); Console.ReadKey(); } } 

这打印:

 9 1000 1000 7298 

这不一定是个好主意,但是这里的实现将这个拆分操作推广到IEnumerable ,返回一个IEnumerable>

 public static IEnumerable> Split(this IEnumerable input, int size) { return input.Select((a, i) => new { Item = a, Index = i }) .GroupBy( b => (b.Index / size)) .Select(c => c.Select(d => d.Item)); } 

里德打败了我,但无论如何这里是我的方法:

 public int[][] Split(int[] source, int size) { int fullArrayCount = source.Length / size; int totalArrayCount = fullArrayCount; int remainder = source.Length - (fullArrayCount * size); if (remainder > 0) { totalArrayCount++; } int[][] output = new int[totalArrayCount][]; for (int i = 0; i < fullArrayCount; i++) { output[i] = new int[size]; Array.Copy(source, i * size, output[i], 0, size); } if (totalArrayCount != fullArrayCount) { output[fullArrayCount] = new int[remainder]; Array.Copy(source, fullArrayCount * size, output[fullArrayCount], 0, remainder); } return output; }