在两个不同的二维数组中复制粘贴值

Copy paste values within two different 2D arrays

假设我设置了这个显示当前俄罗斯方块块旋转状态的二维数组。我将如何将这些值粘贴到任何指定位置的另一个更大的二维数组中?在这种情况下,棋子阵列的宽度和高度为 4 个方块,地图的宽度为 10 个方块,高度为 20 个方块。下例中的值0代表空space,1代表块

// Array of block
        blockMap = new int[4,4]{
            { 0,1,0,0},
            { 0,1,0,0},
            { 0,1,0,0},
            { 0,1,0,0},
        };

你会写一个双循环,将每个值复制到更大的数组,使用偏移量来定位值。 IE。像

blockMap = new int[4,4]{
            { 0,1,0,0},
            { 0,1,0,0},
            { 0,1,0,0},
            { 0,1,0,0},
        };
var myLargeArray = new int[64, 64];
var offsetx = 3;
var offsety = 4;
// Note: GetLength is slow, so store values before looping
var sizex = blockMap.GetLength(0);
var sizey = blockMap.GetLength(1);
for(var x = 0; x < sizex; x++){
    for(var y = 0; y < sizey; y++){
        // Note: you might want to check if the target indices are valid
        myLargeArray[x + offsetx, y + offsety] = blockMap[x, y]; 
    }
}

我通常建议编写自己的二维数组 class,它使用一维数组作为存储,而不是使用多维数组中的构建。原因是在与其他系统交互时,将数据放在一维数组中通常很有用,而且多维数组存储值 column-major,而 row-major 更常见,至少在图像处理中是这样。但是在处理大量数据时,这些要点更为相关。