2011-07-02 211 views
0

由于这样做的性能提高,我正在使用一维数组来模拟二维数组。坐标计算问题!

当数组的高度为30个项目,数组的宽度为20个项目时,用于查找项目放置位置的索引的公式如下所示。

偏移= X * 30 + Y

鉴于此相同的信息,我将如何转换的偏移回位置?我知道这是可能的。我只是想不出如何去做。

+0

_due这样做_...你可以在这一点上阐述的性能提升? AFAIK,C#将基本上编译为您描述的相同类型的算术(仅可能以更高效的方式执行此操作)... – mjv

回答

3
int x = offset/30; 
int y = offset % 30; 
+1

@Mathias您已经切换了您的定义!根据这个问题,offset = 30 * x + y。所以如果x:11和y:3,那么offset = 30 *(11)+ 3 == 333。333/30 == 11和333%30 == 3. – dlev

1

您可以使用除法和模数来做到这一点。

我不知道你当然在用什么,但请考虑可读性远远超过性能。经验法则:只有在实际存在速度问题时才进行优化。

其实如果你担心表现,那么重新考虑你阵列的空间局部性。如果你要在所有元素上运行一个循环,那么在你的情况下按列而不是行来执行。 正如你在那个方向上组织阵列一样。

我会按行(可读性和可维护性记)已经做到了:

offset = y * 20 + x 
+0

我相信你在性能方面是错误的。我正在制作一款必须在真正低规格个人电脑上运行的游戏。它必须非常快速,并且必须每秒完成数以千计的这些事情。 –

+0

@Mathias Lykkegaard Lorenzen:停止_believing_开始_asserting_。简单的时间测试或更复杂的分析工具应该告诉你真正的性能瓶颈所在。你有没有听说过早熟优化? – mjv