具有负索引的数组
我有一个数组,我用它来存储我正在进行的游戏的地图数据。
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的值。 通过此操作,您可以快速访问特定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
上述就是C#学习教程:具有负索引的数组分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1019185.html