Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将方法列表与数组进行比较_C#_Priority Queue_Icomparer - Fatal编程技术网

C# 将方法列表与数组进行比较

C# 将方法列表与数组进行比较,c#,priority-queue,icomparer,C#,Priority Queue,Icomparer,问题背景: 我现在正在做一个探路者。我的最新实现是能够加载不同的映射文件,而不是只使用一个包含映射的数组。所以在它看起来像这样之前: Node[] mMatrix; 但是,因为我想在不同的节点段中加载。我做了这个: List<Node[]> 列表 类Node只包含一个声明为F的int 现在开始讨论这个问题 简而言之,具体的问题是如何在IComparer Members compare方法中比较类型为:List的对象 我一直在使用priorityQueue来加速pathfinde

问题背景:

我现在正在做一个探路者。我的最新实现是能够加载不同的映射文件,而不是只使用一个包含映射的数组。所以在它看起来像这样之前:

Node[] mMatrix;
但是,因为我想在不同的节点段中加载。我做了这个:

List<Node[]>
列表
类Node只包含一个声明为F的int

现在开始讨论这个问题

简而言之,具体的问题是如何在IComparer Members compare方法中比较类型为:List的对象

我一直在使用priorityQueue来加速pathfinder算法,但现在我在比较这个新的“二维”数据结构时遇到了问题。 对于我的
旧工作实现,我使用了以下方法:

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;
    }
}
内部类CompareFNodeMatrix:IComparer
{
//变量声明
节点[]m矩阵;
//建设者
公共比较FNodeMatrix(节点[]矩阵)
{
mMatrix=矩阵;
}
//I比较成员
公共整数比较(整数a、整数b)
{
如果(mMatrix[a].F>mMatrix[b].F)
返回1;
else if(mMatrix[a].F
有人知道如何使用我使用的新数据结构制作比较器吗?
提前谢谢

您说您已经更改了
Node[]mMatrix
列表mMatrix。如果是这样的话

mMatrix[a]
提供的是
节点[]
,而不是
节点

如果您想访问
F
,您必须使用以下内容:

int i = (mMatrix[a])[anotherIndex].F;
编辑1:

如果您使用的是
List n1=(List)a
那么您如何仅使用
n1.F
访问
F
<代码>n1
属于
列表
类型,而不是
节点
。它尽可能的简单。

您可以得到list
list n2=(list)b
并尝试从列表中获取字段
F
n1.F
n1
是列表,而不是节点要实现
IComparer
,您需要一个
比较(int,int)
方法,这使得新的比较方法完全无用。你可能需要在不同的层面上进行操作;毕竟,您如何简单地比较两个对象数组列表?这看起来是个相当复杂的问题。好吧!非常感谢你。你对我应该使用什么样的方法有什么建议吗?我当然同意你的看法,这是一个复杂的问题。当然!现在的问题是,如何使Priorityqueue支持一种2D数组?我打赌使用比较方法是不可能的,因为它只有2个参数?