【发布时间】:2013-03-21 18:06:12
【问题描述】:
我有一个数组,用于存储我正在开发的游戏的地图数据。
MyMapType[,,] map;
我使用固定数组而不是 Collection 的原因是因为固定数组的工作速度非常快。
现在我的问题是,我想在游戏中支持负 z 水平。所以我希望能够访问负索引。
如果这不可行,我想到了另外一对解决方案。
我正在考虑将地平面设置为任意数字(例如 10)作为可能的解决方案,任何小于 10 的都可以被视为负数。但是如果不使用,这不会让数组变大 10 倍吗?
我考虑的另一个解决方案是“滚动我自己的”,您有一个二维数组字典,列表中的 Z 级别作为索引。但这还有很多工作要做,我不确定它是否慢。
所以总结一下 - 创建支持负索引的数组的任何方式?如果没有 - 是否有一种简洁的方法可以“模拟”此类行为而不会牺牲太多 CPU 时间或 RAM - 请注意这些游戏地图最终可能会很大并且需要不断访问。
【问题讨论】:
-
向数组添加 10 个额外元素不会使其变大一个数量级(除非数组只有 ~1 个元素开始)。
-
@MattBall - 它是一个多维数组,10x10x1 不是 10x10x10 大小的 1/10 吗?
-
如果你追求速度,多维数组是个坏主意。它们比一维数组慢得多。如果您正在构建的地图数据大部分是空白空间或有很多冗余,那么不可变四叉树可能是比数组更好的数据结构;访问速度较慢,但您可以在相对较少的内存中表示任意大的区域。而且它们很容易支持负指数。]
-
@Haedrian:它们是一维数组,通过简单的数学运算可以找到正确的记录。但是数学是通过辅助方法完成的,这会导致开销。如果您对其进行分析,您会发现与其他变量访问相比,.NET 中的多维数组访问非常慢。
标签: c# arrays multidimensional-array