我有一个字节数组。我需要删除特定索引处的字节并拆分字节数组。例如,假设我有一个长度为1000的字节数组。我需要从第50位到第200位删除字节。所以我的预期结果是2字节数组。一个是0-49,另一个是201-1000。
Array.RemoveAt是用索引删除字节数组的唯一方法吗?
提前致谢!
答案 0 :(得分:3)
如果速度至关重要,您可以创建两个新阵列并使用Array.Copy()
将所需的字节复制到其中。
为了使这更容易使用,为数组编写一个小扩展方法可能更方便,它提取并返回一个子集,如下所示(注意:为简洁省略了错误处理):
public static class ArrayExt
{
public static T[] Subset<T>(this T[] array, int start, int count)
{
T[] result = new T[count];
Array.Copy(array, start, result, 0, count);
return result;
}
}
然后你可以像这样使用它(我已经从你的例子中纠正了索引;你从201开始,但它应该是200):
var array1 = new byte[1000];
// ... populate array1 somehow, then extract subsets like so:
var array2 = array1.Subset( 0, 50);
var array3 = array1.Subset(200, 800);
// Now array2 and array3 are two byte arrays
// containing the required bytes.
这可能是您可能获得的最快速度。
答案 1 :(得分:2)
byte[] origin = new byte[200];
for(int i = 0; i < origin.Length; i++)
origin[i] = (byte)i;
byte[] first = origin.Take(50).ToArray();
byte[] second = origin.Skip(100).Take(50).ToArray();
答案 2 :(得分:1)
下面的代码可以用来分割字节数组,“index”起始索引和“count”是索引计数到你要分割的索引,这里你的条件索引= 50,计数是150;
List<byte> byteArray = array.ToList(); //array is the byte array
byteArray.RemoveRange(index, count);
Byte[] array1 = byteArray.ToArray(); //array1 is the resultant byte array
答案 3 :(得分:0)
你能不能得到像这样的子阵列?
byte[] array1 = array.ToList().GetRange(0, x1-1).ToArray();
byte[] array2 = array.ToList().GetRange(x2, array.Length- x2 - 1).ToArray();
其中x1和x2在您的示例中为50和200