将一个较小的数组复制到一个较大的数组中

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

还有一个2x2的整数数组,长这样:

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循环,但今天早上我似乎无法想出如何做到这一点。

有什么建议吗?

编辑:

抱歉,这是我目前的做法。只是想知道是否有更好的方法。

实际上这是我正在做的Unity项目中的一部分 - "RoomDoors"是我们较小的数组,而"map"是它要移动到的较大的数组。这是一个随机地图生成器的一部分,需要知道房间瓷砖的哪些“边缘”有门可以连接到其他房间。 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
欢迎来到Stack Overflow。很抱歉,您提问的方式不太好。您是否尝试过任何方法来解决问题?请先展示您的努力,这样其他人也可能会给予帮助。请阅读[FAQ]、[ask]和[help]以作为开始。 - Soner Gönül
两个嵌套的for循环怎么样,一个用于列,一个用于行?一些索引检查也可能会有帮助。 - Codor
1
抱歉,我已经将我的当前代码编辑到帖子中。 - Adam Boulton
该问题要求对工作代码进行美化,使其也适用于http://codereview.stackexchange.com/。 - Codor
2个回答

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];

1

这行内容

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

这行代码是多余的,因为同样的赋值操作将在循环的第一次迭代中执行。删除该行将导致更小、更高效的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接