C#:拆分数组为n个部分 [英] C#: Splitting an array into n parts
问题描述
我有个字节的名单,我想这个名单分割成更小的部分。
VAR阵列=新的List<位> {10,20,30,40,50,60};
该列表中有6个细胞。例如,我想将它分成3份含各2个字节。
我曾尝试写一些for循环和使用二维数组来实现我的目的,但我不知道这是一个正确的做法。
字节[,] array2D =新的字节[窗口,lst.Count /窗口]
无功电流= 0;
的for(int i = 0; I<行;我++)
{
对于(INT J = 0; J< COLS; J ++)
{
array2D [I,J] = LST [电流++];
}
}
一个不错的方法是创建一个通用/扩展方法拆任何数组。这是我的:
///<总结>
///拆分数组为几个较小的数组。
///< /总结>
///&所述; typeparam名=T方式>类型的数组和所述; / typeparam>
///< PARAM NAME =数组方式>分裂数组< /参数>
///< PARAM NAME =大小>在更小的数组的大小< /参数>
///<回报获得包含更小的数组的数组< /回报>
公共静态的IEnumerable<&IEnumerable的LT; T>>斯普利特< T>(这件T []数组,INT大小)
{
对于(VAR I = 0;我≤(浮动)array.Length /尺寸;我++)
{
产量返回array.Skip(我*的大小)。取(大小);
}
}
此外,该解决方案被推迟。然后,只需调用斯普利特(大小)
阵列上。
VAR阵列=新的字节[] {10,20,30,40,50};
变种splitArray = array.Split(2);
按照要求,这里是一个通用/扩展方法来获得一个数组的方形二维数组:
公共静态T [,] ToSquare2D< T>(这件T []数组,INT大小)
{
VAR缓冲=新的T [(INT)Math.Ceiling((双)array.Length /大小),大小]
对于(VAR I = 0;我≤(浮动)array.Length /尺寸;我++)
{
对于(VAR J = 0; J<大小; J ++)
{
缓冲[I,J] =阵列[I + J]。
}
}
返回缓冲区;
}
玩得开心:)
I have a list of bytes and I want to split this list into smaller parts.
var array = new List<byte> {10, 20, 30, 40, 50, 60};
This list has 6 cells. For example, I want to split it into 3 parts containing each 2 bytes.
I have tried to write some for loops and used 2D arrays to achieve my purpose but I don't know it is a correct approach.
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++];
}
}
A nice way would be to create a generic/extension method to split any array. This is mine:
/// <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);
}
}
Moreover, this solution is deferred. Then, simply call split(size)
on your array.
var array = new byte[] {10, 20, 30, 40, 50};
var splitArray = array.Split(2);
As requested, here is a generic/extension method to get a square 2D arrays from an array:
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;
}
Have fun :)
这篇关于C#:拆分数组为n个部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!