比较方法列表与数组

时间:2013-11-26 08:56:40

标签: c# priority-queue icomparer

问题的背景:

我正在寻找一个探路者。我最新的实现是能够加载不同的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;
    }
}

任何人都知道如何使用新的数据结构进行比较? 先谢谢你!

1 个答案:

答案 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.Fn1的类型为List<Node[]>,而不是Node。它尽可能直截了当。