【发布时间】:2012-12-01 23:25:51
【问题描述】:
我有一个 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;
}
}
【问题讨论】:
-
第一个有 9000 个元素,第二个有 810000 个。
-
任务未完成。尺寸不匹配,所以你应该提供额外的信息
-
最后的行/列应该相等。将每个 100x100 2D 阵列想象成游戏的平铺地图。现在我想要 9 个这样的瓦片地图。现在将这 9 个平铺地图描绘成 3x3 网格。因此,如果 100x100 的 1 个 2D 数组是地图的一块,那么我想要其中的 9 个。在这些块中,元素 0-2 位于顶部,然后 3-5 位于中间,6-8 位于底部。鉴于该配置,我想将其设为二维数组。所以我错了,我认为它应该是一个 300x300 2D 数组。
-
如果您使用 C++ 进行编码,请不要提供 100% C 的代码,我的意思是您需要在 C++ 中使用更现代的方法(类型安全)提供所有有用的数据结构方法。您只是使用 C++ 编译器在 C 中编码。