Скопируйте один неровный массив поверх другого

StackOverflow https://stackoverflow.com/questions/2549859

  •  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);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top