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
相关产品推荐
相关产品推荐

