数组按范围划分?

时间:2010-06-15 01:56:47

标签: .net arrays

我有一个数组,我不知道长度,但我知道它将是> = 48bytes。前48个字节是标题,我需要将标题分成两个。

最简单的方法是什么?我希望像header.split(32)这样简单;会工作([0]是32字节[1]为16,假设标头是48字节的数组)

使用.NET

2 个答案:

答案 0 :(得分:3)

这里我将整数数组分成2个4和左元素的数组:

var limit = 4;

int[] array = new int[] { 1, 2, 3, 4, 5, 6 };

int[][] res = array.Select((value, index) => new { index = index, value = value })
                   .GroupBy(i => i.index < limit)
                   .Select(g => g.Select(o => o.value).ToArray())
                   .ToArray();

UPD :使用扩展名重新制作:

class Program
{
    static void Main(string[] args)
    {
        int[] array = new int[] { 1, 2, 3, 4, 5, 6 };

        int[][] res = array.split(4);
    }
}

static class MyExtension
{
    public static int[][] split(this IEnumerable<int> array, int limit)
    {
        return array.Select((value, index) => new { index = index, value = value })
                    .GroupBy(i => i.index < limit)
                    .Select(g => g.Select(o => o.value).ToArray())
                    .ToArray();
    }
}

答案 1 :(得分:0)

我决定写点东西。它可能比扩展功能更好,但它现在很好。

    Byte[][] SplitArray(byte[] main, params int[] size)
    {
        List<Byte[]> ls = new List<byte[]>();
        int offset = 0;
        foreach (var v in size)
        {
            var b = new Byte[v];
            Array.Copy(main, offset, b, 0, v);
            ls.Add(b);
            offset += v;
        }
        {
            var b = new Byte[main.Length-offset];
            Array.Copy(main, offset, b, 0, b.Length);
            ls.Add(b);
        }
        return ls.ToArray();
    }