2013-11-26 34 views
1

背景的问题:比较方法列表中数组

进出口目前工作的一个探路者。我最新的实现是能够加载不同的地图文件,而不是只使用一个包含地图的数组。所以在它看起来像这样:

Node[] mMatrix; 

然而,因为我想加载节点的不同部分。我做了这个:

List<Node[]> 

类,节点只包含一个int声明为F.

而现在的问题!

简而言之,具体问题是如何比较IComparer成员比较方法中类型的对象:List < Node []>。

我一直在使用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

获取列表'列表 n2 =(列表)b;'尝试从列表中获取字段'F','n1.F'这个'n1'是列表,而不是节点 – Grundy

+0

[请勿将标记放入(http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles) –

+1

要实现'IComparer ',你需要一个'Compare(int, int)'方法,这使得你的新的比较方法完全无用。你可能需要在不同的层面上运作;毕竟如何简单地比较两个对象数组列表?它看起来像一个相当复杂的问题。 –

回答

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。它可以直接得到。

+0

当然可以!现在的问题是,我如何使Priorityqueue支持一种2D数组?我敢打赌,使用比较方法是不可能的,因为它只有2个参数? – LamaCoder