如何从字节数组的特定索引中删除字节

本文关键字:字节 索引 删除 数组 字节数 | 更新日期: 2023-09-27 18:32:57

我有一个字节数组。我需要删除特定索引处的字节并拆分字节数组。例如,假设我有一个长度为 1000 的字节数组。我需要从位置 50 到 200 中删除字节.所以我的预期结果是 2 字节数组.一个是 0-49,另一个是 201-1000。

Array.RemoveAt 是删除带有索引的字节数组的唯一方法吗?

提前感谢!

如何从字节数组的特定索引中删除字节

如果速度至关重要,则可以创建两个新数组并使用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.

这可能是您可能获得的最快速度。

例如,您可以使用IEnumerable Take and Skip

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();

下面的代码可以用来拆分字节数组,"index"起始索引和"count"是要拆分哪个索引的索引计数,这里为您的条件 index=50 和 count 是 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

你不能得到这样的子数组吗?

byte[] array1 = array.ToList().GetRange(0, x1-1).ToArray();
byte[] array2 = array.ToList().GetRange(x2, array.Length- x2 - 1).ToArray();

其中 x1 和 x2 在您的示例中是 50 和 200