问题的背景:
我正在寻找一个探路者。我最新的实现是能够加载不同的mapfiles而不是只使用一个包含map的数组。所以在它看起来像这样之前:
Node[] mMatrix;
但是,因为我想加载不同的节点段。我做了这个:
List<Node[]>
类,Node只包含一个声明为F的<。
现在问题了!
简而言之,具体问题是如何比较类型的对象:List&lt;节点[]&gt;在IComparer成员比较方法中。
我一直在使用priorityQueue来加速探路者算法,但现在我在比较这个新的“二维”数据结构时遇到了问题。 对于旧的实现,我使用了这个:
internal class ComparePFNodeMatrix : IComparer<int>
{
//Variables Declaration
Node[] mMatrix;
//Constructors
public ComparePFNodeMatrix(Node[] matrix)
{
mMatrix = matrix;
}
//IComparer Members
public int Compare(int a, int b)
{
if (mMatrix[a].F > mMatrix[b].F)
return 1;
else if (mMatrix[a].F < mMatrix[b].F)
return -1;
return 0;
}
}
任何人都知道如何使用新的数据结构进行比较? 先谢谢你!
答案 0 :(得分:0)
您说您已将Node[] mMatrix;
更改为List<Node[]> mMatrix;
。如果是这样的话,
mMatrix[a]
为您提供Node[]
而不是Node
如果您想访问F
,则必须使用以下内容:
int i = (mMatrix[a])[anotherIndex].F;
编辑1:
如果您使用List<Node[]> n1 = (List<Node[]>)a;
,那么如何只使用F
访问n1.F
? n1
的类型为List<Node[]>
,而不是Node
。它尽可能直截了当。