我有一个 3d 数组,它基本上是 9 个定义为 100x100 的 2d 数组块,它们将在 3x3 网格中排列。我想将这个 3D 数组转换为一个 2D 数组。
array[9][100][100] 需要转为 array[900][900]
关于我将如何解决这个问题的任何想法?
[编辑]
因此,我将降低计数以使其更易于管理。我将使用数组[9][5][5];
如果我初始化数组并打印到文件中,使用下面的答案我不会得到我所期望的。鉴于我的初始化方式,我期望和想要的是一个看起来像这样的文件:
000001111122222
000001111122222
000001111122222
000001111122222
000001111122222
333334444455555
333334444455555
333334444455555
333334444455555
333334444455555
666667777788888
666667777788888
666667777788888
666667777788888
666667777788888
所以我将值与第一个维度联系起来。它给了我 9 个象限的二维数组。这是我想要的布局。所以第一个维度实际上是定义应该放置其他两个维度的象限。所以重点是每个象限 2D 数组都将保存 tile id 来绘制我们的地图。我想这样做是因为玩家将从中心(第 4 象限)开始,但是当他移动到第 5 象限时,服务器(它是一个 MMO)会看到它移到了中心象限之外的右侧,所以它'将需要发送更多地图数据的整个右侧象限。
基本上它发送一个新的 2、5 和 8 象限的地图数据。我会让他们相应地移动 3D 数组(此时很容易。只需移动整个象限),然后在客户端上转换为 2D 数组,以便我可以轻松找到我需要绘制的 2D 地图的哪个子部分因为我可以通过简单的数学找出玩家在 2D 数组中所在的确切图块。这给了我一个流式地图,它在服务器上可能很大,但只有在需要时才将块发送到客户端。
for (j = 0; j < 5; j++)
{
for (k = 0; k < 5; k++)
{
a[0][j][k] = 0;
a[1][j][k] = 1;
a[2][j][k] = 2;
a[3][j][k] = 3;
a[4][j][k] = 4;
a[5][j][k] = 5;
a[6][j][k] = 6;
a[7][j][k] = 7;
a[8][j][k] = 8;
}
}