【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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章