Задать вопрос
@lucky_e3

Как правильно переместить данные из одного массива в другой?

Есть два массива, один из которых меньше другого, например, массив чисел 100x100 и массив того же типа 10x10.
При срабатывании определенного события числа из большого массива должны передаться в малый, но со смещением, например, в 5 "ячеек". Грубо говоря, малый массив двигается по большему.
Для наглядности:
82af9d4345b04cdf84241cb9e18b7aed.png

Зеленые стрелки обозначают условное направление "движение" малого массива.

UPD. Малый массив должен "двигаться" как вправо, так и влево, как вверх, так и вниз.
  • Вопрос задан
  • 7960 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@HASANN
int[,] big = new int[100, 100];
int[,] small = new int[10, 10];
int m = n = 0;

// заполнение массива big
.....
.....

// пример: событие onClick
if (small.Length == 0)
{
   // вызываем процедуру передачи
}
else
{
  // очищаем массив
  // вызываем процедуру передачи
}

// процедура передачи из одного массива в другой
for (int i = 0; i < small.Length; i++)
{
    for (int j = 0; j < small.Length; j++)
    {
        small[i][j] = big[i+n][j+m]
    }    
}
n += 5;
m += 5;
Ответ написан
@Oxoron
Шарпер
// Вместо переменных можно использовать параметры метода
int leftBorderIndex = ...; // Координаты угла квадрата
int topBorderIndex = ...;
int leftShift = ...; // Сдвиг влево
int topShift = ...; // Сдвиг вправо

int[100,100] largeArr= ...;
int[10,10] smallArr = ...;

int cornerLeft = leftBorderIndex + leftShift; // Координаты лево-верхнего угла квадрата, откуда копируем данные
int cornerTop = topBorderIndex + topShift; // Вставить проверки на выход из границ большого массива

for(int row = cornerTop, i=0; row<cornerTop+10;row++, i++) // Проверить инициализацию и инкремент двойных команд
{
    for(int col = cornerLeft, j=0; col<cornerLeft+10; col++,j++)
    {
        smallArr[i,j] = largeArr[row,col];
    }
}


В лоб - как-то так (писал без компилятора, могут быть ошибки). Для ускорения надо работать со столбцами и строками - выносить их обработку в отдельные потоки.
Ответ написан
Для начало написать это псевдокодом с проверкой граничных условий у утверждений.
Попробовать представить себе это.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы