具有负索引的数组

我有一个数组,我用它来存储我正在进行的游戏的地图数据。

MyMapType[,,] map; 

我使用固定数组而不是Collection的原因是因为固定数组的工作速度要快得多。

现在我的问题是,我想支持游戏中的负z级别。 所以我希望能够访问负面索引。

如果这是不可能的,我想到了一对其他的解决方案。

我认为可能的解决方案是将地面级别作为一些任意数字(比如10),任何小于10的都可以被认为是负面的。 但如果它不使用,这不会使数组大10倍吗?

我考虑的另一个解决方案是“滚动我自己的”,你有一个2D数组的字典,其中Z级保持在List中作为索引。 但这是更多的工作,我不确定它是否缓慢。

总结一下 – 创建支持负索引的数组的任何方式? 如果没有 – 是否有一种“模仿”这种行为的干净方式,而不会牺牲太多的CPU时间或RAM – 注意这些游戏地图可能会变得很大并且需要不断访问。

用类替换您的数组:

 class MyArray { private MyMapType[] myArray = new myMapType[size] MyMapType this[index] { get{return myArray[index + offset];} } } 

您可以在构造函数中设置大小和偏移量,甚至可以随意更改它。

在此示例的基础上,这是另一个版本:

 class MyArray { private MyMapType[] positives = new myMapType[size] private MyMapType[] negatives = new myMapType[size-1] MyMapType this[index] { get{return index >= 0 ? positives[index] : negateves[1-index];} } } 

它不会改变您需要为它们设置大小的事实。 老实说,我更喜欢第一个

你能尝试在两个列表中存储MyMapTime [,]列表:

  • 一个用于z值大于或等于0
  • 和负z值的第二个。

表的索引是z的值。 通过此操作,您可以快速访问特定z级别的xy值。 当然问题是:你的z值是多少? 是稀疏还是密集的。 即使对于稀疏值,最终也会得到一个为[,]保存空值的数组。

使用Dictionary类,因为您可以为键或值分配所需的任何值。 虽然我不确定这对于你上面展示的三维数组是如何工作的,但我可以展示如果这是一维数组,它将如何工作,你可以推断如何最好地利用它:

 MyMapType[] map; //map is filled with w/e data Dictionary x = new Dictionary(); x[-1] = //(map data for whatever value is for the negative value); x[0] = map[0] //(etc...) 

我想在这里指出,字典允许负数索引,2D字典也可以解决这些问题,只需考虑数据结构,如果可以使用字典

请注意,词典和列表用于不同的场景。 它们的速度取决于它们使用的function