2D 数组到双链接列表或 c# 中的自定义数据结构用于网格目的?



好的,所以我有一个 2D 对象数组,这些对象在 2D 空间中表示,列和原始转换为 (x,y( 点(笛卡尔坐标系(。

当我想从一个物体访问它们的邻居时,问题就开始了。

我立即想到,我可以通过从迭代到 2D 数组中查看 i,j 来访问它们,如下所示:

(i,j+1)
↑
(i-1,j) ← (i,j) → (i+1,j)
↓
(i,j-1)

一切都很好,直到我的网格形状变成了非矩形形状。

然后一个Java家伙告诉我,我应该使用自定义数据结构来保存我的对象的引用,它实际上是一个双链接列表,不仅有下一个和上一个指针,还有顶部,向下,右侧和左侧指针。我不应该为常规数组编写这样的代码,而应该使用适当的数据结构,这将使我在如何为我的对象插入、删除、初始化和许多其他函数方面提供更多功能和灵活性。

出于某种原因,我认为他是对的。

通过这种方式,我认为我可以创建更复杂的函数,例如从一个点获取半径内的所有对象。这是出于游戏开发目的,后来在用于路径查找的 A* 等算法上将在此结构上开发和运行。

所以我的问题是: c# 中是否有任何内置结构可以帮助我解决这个问题,或者如果没有,我应该尝试从头开始创建一个自定义结构或尝试扩展继承已经内置的 c# 结构。 该结构的正确术语是什么?迈思瑞斯链接列表?多路链路列表?

附言我避免发布代码,因为它来自需要大量解释的自定义游戏引擎。

只是一个想法...

我会开发一个类(即Space( 保存另一个自定义类的简单列表(即Point(。 master类可以有一些定义空间形状和扩展的属性,并且可以实现一系列问题方法(Point GetNearest(Point p)List<Point> GetPointsInRadius(int center, int radius),...(,每个问题方法迭代抛出点列表,以及一组添加/删除/移动点方法

你的Point类有一个属性列表(int x, int y, Point top, Point down, Point left, Point right(和一系列方法(int DistanceFrom(Point p), bool IncludedIn(int center, int radius), int DistanceFromLeft/Right/Top/Down(),...等等

最新更新