Как я мог выполнить копирование одного массива с зубцами в другой? Например, у меня есть массив 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 ответа
Из-за квадратного характера вашего примера это кажется более подходящим для 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);
}
}
secondArray[i].CopyTo(firstArray[startingRow + i], startingColumn);
вместо своего внутреннего цикла. Ты ударил меня!
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.