C#:拆分数组为n个部分 [英] C#: Splitting an array into n parts

查看:256
本文介绍了C#:拆分数组为n个部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有个字节的名单,我想这个名单分割成更小的部分。

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆