2015-01-22 4 views
3

Я изо всех сил пытаюсь придумать самый элегантный/простой способ сделать это. Возможно, я немного переусердствовал.Копирование меньшего массива в более крупный

Допустим, у меня есть 5x5 массив целых чисел, который выглядит следующим образом:

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 

И еще 2х2 массив целых чисел, который выглядит следующим образом:

5 1 
2 3 

Я хочу, чтобы выбрать местоположение в массиве 5x5, скажем [2] [2], и поместите значения из второго массива в первое, так что это выглядит так:

0 0 0 0 0 
0 0 0 0 0 
0 0 5 1 0 
0 0 2 3 0 
0 0 0 0 0 

Моя первоначальная мысль заключалась в том, чтобы использовать цикл for после определения количества строк/столбцов в массиве, который должен быть скопирован, но я не могу понять, как это делается сегодня утром.

Любые предложения?

Edit:

К сожалению, вот так, как я это делаю в данный момент. Просто интересно, есть ли лучший способ.

Это на самом деле часть единства, которую я делаю - «RoomDoors» - это наш меньший массив, а «карта» - это больший массив, в который он перемещается. Это часть генератора случайных карт, который должен знать, какие «края» плиток в комнатах имеют двери на них, которые могут подключаться к другим комнатам. RoomDoors хранит 4 булеана, по одному для каждого направления, говорящего мне, есть ли там дверь.

roomDoors = previousRoom.GetComponent<RoomDataInterface>().rooms; //2d array of room/door arrangement in new room 
    sizeCol = roomDoors.GetLength (0); 
    sizeRow = roomDoors.GetLength (1); 
    map [10, 10] = roomDoors [0, 0]; // top left of the room goes in the spot 
    for (int i = 0; i < sizeCol; i ++){ 
     for (int j = 0; j < sizeRow; j ++) { 
      map [i + 10,j + 10] = roomDoors[i,j]; 
     } 
+7

Добро пожаловать на переполнение стека. Извините, но это не очень хороший способ задать вопрос. Вы пробовали _anything_ до сих пор решить вашу проблему? Покажите свои усилия, чтобы люди могли показать их. Пожалуйста, прочитайте [FAQ], [ask] и [help] как начало .. –

+0

Как насчет двух вложенных циклов 'for', один для столбцов и один для строк? Некоторая проверка индекса также может быть полезна. – Codor

+1

Извините, я редактировал свой текущий код в сообщении. –

ответ

1

Линия

map [10, 10] = roomDoors [0, 0]; 

является излишним, так как то же самое назначение будет выполняться первой итерации цикла. Удаление линии приведет к меньшему и более эффективному решению.

2

Я думаю, что вы не можете сделать гораздо лучше, просто удалить ненужное назначение:

roomDoors = previousRoom.GetComponent<RoomDataInterface>().rooms; 
sizeCol = roomDoors.GetLength (0); 
sizeRow = roomDoors.GetLength (1); 
for (int i = 0; i < sizeCol; i ++) 
    for (int j = 0; j < sizeRow; j ++) 
    map [i + 10, j + 10] = roomDoors[i, j]; 
Смежные вопросы