Скопируйте один зубчатый массив поверх другого - PullRequest
3 голосов
/ 31 марта 2010

Как я могу выполнить копирование одного зубчатого массива в другой? Например, у меня есть массив 5x7:

0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0

и массив 4x3:

0,1,1,0
1,1,1,1
0,1,1,0

Я бы хотел иметь возможность указать конкретную начальную точку, такую ​​как (1,1), на моем массиве с нулевым значением и скопировать на него второй массив, чтобы у меня был такой результат:

0, 0, 0, 0, 0, 0, 0
0, 0, 1, 1, 0, 0, 0
0, 1, 1, 1, 1, 0, 0
0, 0, 1, 1, 0, 0, 0
0, 0, 0, 0, 0, 0, 0

Каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Это должно работать, даже если ваши входы не прямоугольные:

void copy(int[][] source, int[][] destination, int startRow, int startCol)
{
    for (int i = 0; i < source.Length; ++i)
    {
        int[] row = source[i];
        Array.Copy(row, 0, destination[i + startRow], startCol, row.Length);
    }
}
2 голосов
/ 31 марта 2010

Из-за квадратичного характера вашего примера это кажется более подходящим для 2D-массива, а не зубчатым. Но в любом случае, вы, конечно, могли бы сделать это старомодным способом и обойти это. Что-то вроде (не проверено)

for (int i = 0; i < secondArray.Length; i++)
{
    for (int j = 0; j < secondArray[0].Length; j++)
    {
        firstArray[startingRow + i][startingColumn + j] = secondArray[i][j];
    }
}

Редактировать: Как и Марк, у меня также было небольшое улучшение, немного отличающееся, но в том же духе.

for (int i = 0; i < secondArray.Length; i++)
{
    secondArray[i].CopyTo(firstArray[startingRow + i], startingColumn);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...