You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在字节数组中插入数据并移位保留原有元素不被覆盖

实现方案

核心逻辑是先移位腾出空位,再写入插入数组,你之前直接调用Array.Copy()覆盖值是因为跳过了移位步骤,正确操作如下:


操作步骤

  1. C#中数组为定长结构,首先需要将原数组扩容为「原长度 + 待插入数组长度」,预留插入空间
  2. 调用Array.Copy()将原数组插入位置之后的所有元素,向后偏移待插入数组的长度,腾出连续空位
  3. 再次调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:57:02