我有一个数组,我不知道长度,但我知道它将是> = 48bytes。前48个字节是标题,我需要将标题分成两个。
最简单的方法是什么?我希望像header.split(32)这样简单;会工作([0]是32字节[1]为16,假设标头是48字节的数组)
使用.NET
答案 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();
}