【C#】截取/複製二維數組
使用 System.Buffer.BlockCopy()
方法複製二維數組中的元素時要注意一點:所有的偏移參數都要乘以元素類型的尺寸( sizeof()
)。
下面的方法可以從一個二維數組中截取一片數據放到新的二維數組中返回。如果把返回值數組提取到參數中作爲目標數組,並添加目標數組的行、列偏移參數,就可以將該方法改成用法和一維數組複製方法一樣的二維數組複製方法。
public double[,] CutArray2D(double[,] source, int rowOffset, int columnOffset, int rowCount, int columnCount)
{
var srcColumnCount = source.GetLength(1);
var typeSize = sizeof(double);
var ret = new double[rowCount, columnCount];
for (int i = 0; i < rowCount; i++)
{
var srcOffset = ((rowOffset + i) * srcColumnCount + columnOffset) * typeSize;
var dstOffset = i * columnCount * typeSize;
Buffer.BlockCopy(source, srcOffset, ret, dstOffset, columnCount * typeSize);
}
return ret;
}