我有一个字节列表,我想把这个列表分成更小的部分.
var array = new List<byte> {10,20,30,40,50,60};
该列表有6个单元格.例如,我想把它分成3个部分,每个2个字节.
我试图写一些for循环,并使用2D数组来实现我的目的,但我不知道这是一个正确的方法.
byte[,] array2D = new byte[window,lst.Count / window]; var current = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { array2D[i,j] = lst[current++]; } }
解决方法
一个很好的方法是创建一个通用/扩展方法来分割任何数组.这是我的:
/// <summary> /// Splits an array into several smaller arrays. /// </summary> /// <typeparam name="T">The type of the array.</typeparam> /// <param name="array">The array to split.</param> /// <param name="size">The size of the smaller arrays.</param> /// <returns>An array containing smaller arrays.</returns> public static IEnumerable<IEnumerable<T>> Split<T>(this T[] array,int size) { for (var i = 0; i < (float)array.Length / size; i++) { yield return array.Skip(i * size).Take(size); } }
此外,这种解决方案推迟了.然后,只需在数组上调用split(size)即可.
var array = new byte[] {10,50}; var splitArray = array.Split(2);
根据要求,这里是一个通用/扩展方法来从数组中获取正方形的2D数组:
public static T[,] ToSquare2D<T>(this T[] array,int size) { var buffer = new T[(int)Math.Ceiling((double)array.Length/size),size]; for (var i = 0; i < (float)array.Length / size; i++) { for (var j = 0; j < size; j++) { buffer[i,j] = array[i + j]; } } return buffer; }
玩的开心 :)