首页 > 解决方案 > 二维数组到双链接列表或c#中用于网格目的的自定义数据结构?

问题描述

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

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

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

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

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

然后一个 java 人告诉我,我应该使用自定义数据结构来保存我的对象的引用,它实际上是一个双链接列表,不仅包含 next 和 previous 指针,还包含 top、down、right 和 left 指针。我不应该为常规数组编写这样的代码,并且不应该使用适当的数据结构来为我的对象插入、删除、初始化和许多其他函数提供更多的能力和灵活性。

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

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

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

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

标签: c#data-structuresgrid

解决方案


只是一个想法...

我将开发一个类(即Space),其中包含另一个自定义类(即Point)的简单列表。主类可以具有一些定义空间形状和扩展的属性,并且可以实现一系列问题方法(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(),...等等


推荐阅读