Скопируйте один неровный массив поверх другого
-
23-09-2019 - |
Вопрос
Как я мог бы выполнить копирование одного неровного массива в другой?Например, у меня есть массив размером 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), в моем массиве all zero и скопировать мой второй массив поверх него, чтобы у меня был такой результат, как:
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
Каков был бы наилучший способ сделать это?
Решение
Из-за квадратного характера вашего примера это кажется более подходящим для 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);
}
Другие советы
Это должно сработать, даже если ваши входные данные не являются прямоугольными:
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);
}
}