如何在字节数组中插入数据并移位保留原有元素不被覆盖
实现方案
核心逻辑是先移位腾出空位,再写入插入数组,你之前直接调用Array.Copy()覆盖值是因为跳过了移位步骤,正确操作如下:
操作步骤
- C#中数组为定长结构,首先需要将原数组扩容为「原长度 + 待插入数组长度」,预留插入空间
- 调用
Array.Copy()将原数组插入位置之后的所有元素,向后偏移待插入数组的长度,腾出连续空位 - 再次调用
Array.Copy()将待插入数组写入腾出的空位即可
可运行代码示例
// 原始数组 byte[] source = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 待插入的小数组 byte[] insertArr = { 11, 11, 11 }; // 插入起始索引:原数组第3个索引之后,对应索引位置为4 int insertIndex = 4; // 扩容原数组,预留插入空间 Array.Resize(ref source, source.Length + insertArr.Length); // 移位:将插入位置后的元素后移,腾出空位 Array.Copy( sourceArray: source, sourceIndex: insertIndex, destinationArray: source, destinationIndex: insertIndex + insertArr.Length, length: source.Length - insertIndex - insertArr.Length ); // 写入待插入数组 Array.Copy(insertArr, 0, source, insertIndex, insertArr.Length); // 输出结果:0,1,2,3,11,11,11,4,5,6,7,8,9 Console.WriteLine(string.Join(",", source));
原理解释
Array.Copy()本身支持同一个数组内的重叠区域拷贝,会先把源区域的内容读取缓存后再写入目标区域,不会出现移位过程中数据丢失的问题。
内容的提问来源于stack exchange,提问作者SoftWick
相关产品推荐
相关产品推荐

