【C#】截取/复制二维数组

【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;
}

你可能感兴趣的:(编程语言)