C#:将数组拆分成n个部分

前端之家收集整理的这篇文章主要介绍了C#:将数组拆分成n个部分前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个字节列表,我想把这个列表分成更小的部分.
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;
}

玩的开心 :)

猜你在找的C#相关文章