微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

玩的开心 :)

原文地址:https://www.jb51.cc/csharp/96169.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐