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

C#如何使用二维数组填充三维数组的指定二维切片

C# 三维数组切片赋值实现方案

C# 原生的矩形多维数组不支持thArray[,,0] = twArray这类直接切片赋值的语法糖,可通过以下两种方式实现需求:

方案1:双层循环赋值

逻辑简单直观,无需关注内存布局,适合对性能要求不高的场景:

int targetZLayer = 0;
for (int x = 0; x < 1000; x++)
{
    for (int y = 0; y < 1000; y++)
    {
        thArray[x, y, targetZLayer] = twArray[x, y];
    }
}

方案2:内存拷贝(性能最优)

利用C#提供的Buffer.BlockCopy直接操作连续内存,性能远高于循环赋值,适合大数据量场景:

int targetZLayer = 0;
// 计算目标切片在三维数组中的起始字节偏移
int layerByteSize = 1000 * 1000 * sizeof(byte);
int startOffset = targetZLayer * layerByteSize;
// 直接内存拷贝
Buffer.BlockCopy(twArray, 0, thArray, startOffset, layerByteSize);

注意事项

  • 以上方案仅适用于矩形多维数组(用[,]/[,,]声明的连续内存数组),不适用于内存不连续的交错数组([][]/[][][])
  • 赋值前需确保二维数组的长、宽维度和三维数组对应维度长度完全一致,避免出现数据错位或内存越界
  • 若数组元素不是byte类型,计算字节长度时需替换为对应类型的大小,例如int类型需使用sizeof(int)

内容的提问来源于stack exchange,提问作者Farhad Hajnoruzi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:01